scala - 收集和计数操作之间有什么区别?

标签 scala apache-spark

当我在local-mode spark中编写scala程序时,代码类似于RDD.map(x => function()).collect,控制台没有日志输出很长一段时间,我想它卡住了。于是我把 Action collect改成了count,整个执行很快就完成了。另外,map 阶段产生的记录很少被collect 收集,因此在将结果发送回驱动程序时不会出现网络传输问题.

谁能知道原因或遇到过类似的问题吗?

最佳答案

方法count对每个分区的 RDD 的条目数求和,并返回包含该数字的整数,因此数据传输最少;另一方面,方法collect正如它的名字所说,将所有条目作为 List 带到驱动程序中,因此如果没有足够的内存,您可能会遇到几个异常(这就是为什么不建议执行 collect 如果您不确定它是否适合您的驱动程序,通常有更快的替代方案,例如 take ,它也会触发惰性转换),此外它需要传输更多数据。

关于scala - 收集和计数操作之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416366/

相关文章:

scala - 如何以编程方式使方法可链接?

scala - 读取行期间的 Source.fromInputStream 异常处理

python - 根据第一个字符的出现分隔字符串列

scala - 将字符串 RDD 转换为 Int RDD

apache-spark - 从 HDFS 检索数据时如何获取文件元数据?

scala - 使用异常将多个值插入表中

Java 可选 : map to subclass or else super class

c++ - 理解这个 Scala 代码

scala - 连接 hive 和spark时发生异常HDFS上的根暂存目录:/tmp/hive应该是可写的。当前权限是:rwxrwxr-x

scala - 在 Spark scala 中匹配 Csv 文件中的列名称