当我在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/