reduce
与fold
在技术实施方面有何区别?
我理解他们的签名不同,因为fold
接受添加到每个分区输出的附加参数(即初始值)。
fold
?提前致谢。
答案 0 :(得分:5)
在性能方面没有实际区别:
RDD.fold
操作在使用fold
实施的分区Iterators
上使用foldLeft
。RDD.reduce
在分区reduceLeft
上使用Iterators
。这两种方法都使用foldLeft
implemented like this的简单循环依次保持可变累加器和进程分区:
foreach (x => result = op(result, x))
for (x <- self) {
if (first) {
...
}
else acc = op(acc, x)
}
Spark中这些方法之间的实际区别仅与它们在空集合上的行为和使用可变缓冲区的能力有关(可以说它与性能有关)。您可以在Why is the fold action necessary in Spark?
中找到一些讨论此外,整体处理模型没有差异: