我正在接受审核,并指出:
forEach强制将所有数据发送到单个进程(驱动程序) 这将导致大规模问题(例如内存不足问题)。相反, map()函数具有相同的目的,并在各个进程之间分配处理 集群中的不同Worker节点。
是正确的,我找不到任何说forEach在地图分发时未分发的文档!!!
答案 0 :(得分:1)
我相信您正在谈论在RDD或数据集上应用这些功能。 无论哪种情况,驱动程序都没有。所有代码都在执行程序中执行。 foreach是一种不返回任何操作的操作,其中map()充当从一个值到另一个值的转换器。
def foreach(f:(T)⇒单位):单位 将函数f应用于此RDD的所有元素。
foreach(func)在数据集的每个元素上运行函数func。通常这样做是出于副作用,例如更新累加器或与外部存储系统进行交互。 注意:在foreach()外部修改除Accumulators以外的变量可能会导致未定义的行为。有关更多详细信息,请参见了解闭包。
def映射[U](f:(T)⇒U)(隐式arg0:ClassTag [U]):RDD [U] 通过将函数应用于此RDD的所有元素来返回新的RDD。