在Apache Spark中,reduce和reduceByKey有哪些功能上的区别?为什么reduceByKey是一个转换操作而reduce是一个动作操作?
在Apache Spark中,reduce和reduceByKey有哪些功能上的区别?为什么reduceByKey是一个转换操作而reduce是一个动作操作?
这与我对reduceByKey的解释几乎是重复的,但我将详细说明使它们不同的具体部分。不过请先参考我的答案,以了解reduceByKey
内部更多的细节。
基本上,reduce
必须将整个数据集拉到单个位置,因为它正在缩减到一个最终值。另一方面,reduceByKey
则为每个键一个值。并且由于此操作可以在每台机器上先进行本地运行,因此它可以保持为RDD,并对其数据集进行进一步转换。
但请注意,您可以使用reduceByKeyLocally
将Map自动拉到单个位置。
这是 Qt 助手:
reduce(f): 使用指定的交换和结合二元操作符来缩小此 RDD 的元素。当前在本地减少分区。
reduceByKey(func,numPartitions = None,partitionFunc =):使用关联且可交换的缩小函数合并每个键的值。