【发布时间】:2020-04-15 18:41:52
【问题描述】:
就功能而言,Apache Spark 中的 reduce 和 reduceByKey 有什么区别? 为什么 reduceByKey 是一个转换,而 reduce 是一个动作?
【问题讨论】:
标签: apache-spark
就功能而言,Apache Spark 中的 reduce 和 reduceByKey 有什么区别? 为什么 reduceByKey 是一个转换,而 reduce 是一个动作?
【问题讨论】:
标签: apache-spark
这接近于my answer explaining reduceByKey 的副本,但我将详细说明使两者不同的具体部分。但是,有关reduceByKey 内部的更多细节,请参阅我的回答。
基本上,reduce 必须将整个数据集拉到一个位置,因为它正在减少到 一个 最终值。另一方面,reduceByKey 是 each 键的一个值。由于这个动作可以首先在每台机器上本地运行,所以它可以保持一个 RDD 并对其数据集进行进一步的转换。
请注意,您也可以使用 reduceByKeyLocally 自动将地图下拉到一个位置。
【讨论】:
这是qt助手:
reduce(f):使用指定的减少这个 RDD 的元素 交换和结合二元运算符。目前减少 本地分区。
reduceByKey(func, numPartitions=None, partitionFunc=) : 使用关联和交换归约合并每个键的值 函数。
【讨论】: