有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpark:运行时reduce元素的技术术语?

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

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

Hadoop的reducer函数将使用键“Hello”收集所有5个元素,然后在reducer函数中进行聚合

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

那么,有没有专门的术语来描述Spark中使用的这种计算方法呢?谢谢


共 (3) 个答案

  1. # 1 楼答案

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

    在Map Reduce中,若要在映射器端预聚合,则需要指定组合器类;若使用reduceByKey、aggregateByKey、combineByKey,则使用spark组合器。如果不想使用combiner,则必须使用groupByKey函数

    对于您所问的主题,map reduce和spark中的技术术语是相同的。但对于分布式缓存这样的主题,它是不同的,在Spark中,它被称为广播。此外,尽管术语相同,但它们的操作方式也存在细微差异

  2. # 2 楼答案

    Spark以更具功能性的方式进行编程,因此函数式编程术语应该适用于这里

    rdd.reduce(_ + _)
    

    是一种减少(折叠/累积)功能

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

    Fold (a.k.a. Reduce, Accumulate) is a higher order function that processes (using a combiner function) a list of elements in some order and build up a return value

    其中“+”是一个组合器函数:

    Combiner is a function that is applied to two elements and produces a result that can be combined using combiner with the remaining elements in the list.

    此外,还有更多关于折叠函数及其在函数编程中的应用的详细信息Fold (higher-order function)

  3. # 3 楼答案

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

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

    如果不加1+1,+1,+1,+1,+1,+1的组合,你就不能加1+1+1,除非我忘了数学