【问题标题】:Difference between reduce and reduceByKey in Apache SparkApache Spark 中 reduce 和 reduceByKey 的区别
【发布时间】:2020-04-15 18:41:52
【问题描述】:

就功能而言,Apache Spark 中的 reduce 和 reduceByKey 有什么区别? 为什么 reduceByKey 是一个转换,而 reduce 是一个动作?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    这接近于my answer explaining reduceByKey 的副本,但我将详细说明使两者不同的具体部分。但是,有关reduceByKey 内部的更多细节,请参阅我的回答。

    基本上,reduce 必须将整个数据集拉到一个位置,因为它正在减少到 一个 最终值。另一方面,reduceByKeyeach 键的一个值。由于这个动作可以首先在每台机器上本地运行,所以它可以保持一个 RDD 并对其数据集进行进一步的转换。

    请注意,您也可以使用 reduceByKeyLocally 自动将地图下拉到一个位置。

    【讨论】:

      【解决方案2】:

      请浏览此官方文档link

      reduce 是一种使用函数 func 聚合数据集元素的操作(它接受两个参数并返回一个),我们也可以对单个 RDD 使用 reduce(更多信息请点击HERE)。

      reduceByKey 在 (K, V) 对的数据集上调用时,返回 (K, V) 对的数据集,其中每个键的值使用给定的 reduce 函数 func 聚合,该函数的类型必须为 ( V,V) => V. (更多信息请点击HERE)

      【讨论】:

        【解决方案3】:

        这是qt助手:

        reduce(f):使用指定的减少这个 RDD 的元素 交换和结合二元运算符。目前减少 本地分区。

        reduceByKey(func, numPartitions=None, partitionFunc=) : 使用关联和交换归约合并每个键的值 函数。

        【讨论】:

          猜你喜欢
          • 2022-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-03
          • 1970-01-01
          • 2023-03-11
          • 1970-01-01
          • 2016-06-23
          相关资源
          最近更新 更多