Apache Spark中reduce和reduceByKey的区别

21

在Apache Spark中,reduce和reduceByKey有哪些功能上的区别?为什么reduceByKey是一个转换操作而reduce是一个动作操作?

3个回答

20

这与我对reduceByKey的解释几乎是重复的,但我将详细说明使它们不同的具体部分。不过请先参考我的答案,以了解reduceByKey内部更多的细节。

基本上,reduce必须将整个数据集拉到单个位置,因为它正在缩减到一个最终值。另一方面,reduceByKey则为每个键一个值。并且由于此操作可以在每台机器上先进行本地运行,因此它可以保持为RDD,并对其数据集进行进一步转换。

但请注意,您可以使用reduceByKeyLocally将Map自动拉到单个位置。


0
请查看此官方文档 linkreduce 是一种操作,用于使用函数 func(它接受两个参数并返回一个参数)聚合数据集的元素,我们还可以将 reduce 用于单个 RDDs(有关更多信息,请单击HERE)。 reduceByKey 适用于 (K, V) 对的数据集,返回一个 (K, V) 对的数据集,其中每个键的值都使用给定的 reduce 函数 func 进行聚合,该函数必须是类型 (V,V) => V。(有关更多信息,请单击HERE

0

这是 Qt 助手:

reduce(f): 使用指定的交换和结合二元操作符来缩小此 RDD 的元素。当前在本地减少分区。

reduceByKey(func,numPartitions = None,partitionFunc =):使用关联且可交换的缩小函数合并每个键的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接