收集和计数操作之间的区别是什么?

时间:2015-12-22 12:53:16

标签: scala apache-spark

当我在本地模式spark中编写scala程序时,代码类似于RDD.map(x => function()).collect,控制台中很长时间没有日志输出,我猜它会卡住。所以我将动作collect更改为count,整个执行很快就完成了。另外,由map收集的collect阶段产生的记录很少,因此在将结果发回给驱动程序时,网络传输可能会导致问题。

任何人都可以知道原因或遇到过类似的问题吗?

1 个答案:

答案 0 :(得分:4)

方法count将每个分区的RDD的条目数相加,并返回一个由该数字组成的整数,因此数据传输最小;另一方面,方法collect正如其名称所示将所有条目作为List引入驱动程序,因此如果没有足够的内存,您可能会得到几个例外(这就是为什么不建议这样做)要做一个collect,如果你不确定它是否适合你的驱动程序,通常有更快的选择,如take,它也会触发延迟转换),此外它需要传输更多的数据。