【问题标题】:Spark: Technical terminology for reduce elements on the run-time?Spark:运行时减少元素的技术术语?
【发布时间】:2016-04-11 04:42:11
【问题描述】:

在下面的字数统计示例中:

(Hello,1)
(Hello,1)
(Hello,1)
(Hello,1)
(Hello,1)

Hadoop的reducer函数会收集所有5个key为“Hello”的元素,然后在reducer函数中进行聚合。

然而,在 Spark 中,它实际上是每次减少 2 个元素。例如,它将第一个和第二个 (Hello,1) 组合成 (Hello,2),将第三个和第四个 (Hello,1) 组合成 (Hello,2) ... 等等(当然,实际情况可能在不同的顺序)。

那么,是否有特定的术语来描述 Spark 中使用的这种计算方法?谢谢!

【问题讨论】:

    标签: java hadoop apache-spark mapreduce


    【解决方案1】:

    它不一定以这种方式聚合值。您认为 MapReduce 中的映射器如何工作?

    你可以把它想象成一个哈希图。如果它看到 key 已经在 hashmap 中,它会增加 value,如果没有,它会将 key 插入到 hashmap 中,然后初始化 value。

    除非我忘记了一些数学运算,否则你不能添加 1+1+1+1+1 而不添加 1+1,+1,+1,+1。

    【讨论】:

      【解决方案2】:

      Spark 以更函数化的方式实现,因此函数式编程术语应该适用于此。

      rdd.reduce(_ + _)
      

      是一个reduce(折叠/累积)函数

      here 有一些很好的解释,所以我只是复制粘贴其中一些:

      Fold(又名 Reduce、Accumulate)是一个高阶函数,它以某种顺序处理(使用组合函数)元素列表并建立一个返回值

      这里的“+”是一个组合函数

      Combiner 是一个应用于两个元素并产生可以使用组合器与列表中的其余元素组合的结果的函数。

      还有更多关于折叠函数的详细信息以及它们在函数式编程中的应用Fold (higher-order function)

      【讨论】:

        【解决方案3】:

        术语与 Map Reduce 相同。唯一不同的是,不像 Map Reduce 只提供 map 和 reduce 函数来实现过滤、连接和聚合等逻辑,Spark 有很多功能。对于map reduce中的map,我们在spark中有map、flatMap、filter等,对于map reduce中的reduce,我们在spark中有reduce、count、reduceByKey、countByKey、aggregateByKey、groupByKey、combineByKey等。

        在 Map Reduce 中,如果要在 mapper 端进行预聚合,则需要指定组合器类,如果使用 reduceByKey、aggregateByKey、combineByKey,则使用 spark 组合器。如果你不想使用组合器,那么你必须使用 groupByKey 函数。

        对于您所询问的主题,map reduce 和 spark 中的技术术语是相同的。但对于分布式缓存等主题则不同,在Spark中称为广播。此外,即使术语相同,它们的操作方式也存在细微差别。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-12
          • 2011-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-13
          • 1970-01-01
          • 2014-06-09
          相关资源
          最近更新 更多