收集和计数操作有什么区别?

gre*_*tji 1 scala apache-spark

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

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

Alb*_*nto 5

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