在下面的字数示例中:
(Hello,1)
(Hello,1)
(Hello,1)
(Hello,1)
(Hello,1)
Hadoop的reducer函数会收集所有5个关键字为"Hello"的元素,然后在reducer功能中进行聚合。
然而,在Spark中,它实际上每次减少2个元素。例如,它将第一个和第二个(Hello,1)组合为(Hello、2),将第三个和第四个组合为(你好,1)到(你好,2)。。。等等(当然,实际情况可能有不同的顺序)。
那么,有没有一个特定的术语来描述Spark中使用的这种计算方法?谢谢
它不一定以这种方式聚合值。你认为MapReduce中的映射程序是如何工作的?
你可以把它想象成一个哈希图。如果它看到键已经在hashmap中,它会增加值,如果没有,它会将键插入hashmap,然后初始化值。
在某些组合中,你不能加1+1+1+1+1而不加1+1、+1、+1和+1,除非我忘了一些数学。
Spark以更具功能性的方式来实现这一点,因此函数式编程术语在这里应该适用。
rdd.reduce(_ + _)
是减少(折叠/累积)函数:
这里有一些很好的解释,所以我只是复制粘贴其中的一些:
Fold(也称为Reduce、Accumulate)是一个高阶函数,它按一定顺序处理(使用组合器函数)元素列表,并建立返回值
其中"+"是组合器函数:
组合器是一个应用于两个元素并产生结果的函数,该结果可以使用组合器与列表中的其余元素组合。
此外,还有更多关于fold函数及其在函数编程中的应用的详细信息fold(高阶函数)
术语与Map Reduce相同。唯一不同的是,Map Reduce只提供Map和Reduce函数来实现过滤、联接和聚合等逻辑,Spark有很多函数。对于map-in-map reduce,我们在spark中有map、flatMap、filter等,对于reduce-in-map,我们在spark中有reduce、count、reduceByKey、countByKey、aggregateByKey、groupByKey、combineByKey等。
在Map Reduce中,如果要在映射器端预聚合,则需要指定组合器类;在spark中,如果使用reduceByKey、aggregateByKey、combineByKey,则使用组合器。如果您不想使用组合器,那么您必须使用groupByKey函数。
对于您所询问的主题,技术术语在地图还原和火花中是相同的。但对于分布式缓存之类的主题则不同,在Spark中它被称为广播。尽管术语相同,但它们的操作方式也有细微的差异。