我正在使用 Learning Spark,Lightning-Fast 数据分析书学习 Spark。
我去过很多网站并阅读了很多文章,但我仍然不明白 和 之间的reduce()区别fold()。
根据我正在使用的书:
“类似于reduce()is fold(),它也采用与所需签名相同的函数reduce(),但另外采用“零值”用于每个分区的初始调用。您提供的零值应该是您的标识元素“
为了帮助我更好地理解,我运行以下代码:
rdd = sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 2)
rdd.getNumPartitions()
Out[1]: 2
rdd.glom().collect()
Out[2]: [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
rdd.reduce(lambda x,y: x+y)
Out[3]: 55
rdd.fold(0, lambda x,y: x+y)
Out[4]: 55
问题:1)引用:“但另外需要一个“零值”用于每个分区的初始调用。” 每个分区的初始调用是什么意思?
2)引用:“您提供的零值应该是您的操作的标识元素;也就是说,在您的函数中多次应用它不应该改变值”如果是这样,那么提供“值”的意义何在为手术?
3)根据我上面提供的例子,两者的总和都是55。有什么区别?