在下面的字数统计示例中:
(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中使用的这种计算方法呢?谢谢!
发布于 2016-01-07 07:02:54
它不一定以这种方式聚合值。你认为MapReduce中的映射器是如何工作的?
你可以把它想象成一个hashmap。如果它发现键已经在hashmap中,它会递增该值,如果没有,它会将键插入到hashmap中,然后初始化值。
你不能在不添加1+1,+1,+1,+1的组合的情况下添加1+1+1+1+1,除非我忘记了一些数学。
发布于 2016-01-07 08:06:00
Spark以更多的函数式方式来实现,所以函数式编程术语应该适用于这里。
rdd.reduce(_ + _)是reduce (折叠/累加)函数
here上有一些很好的解释,所以我只是复制粘贴其中的一些:
Fold (也称为Reduce,Accumulate)是一个高阶函数,它处理(使用组合器函数)按一定顺序排列的元素列表,并构建返回值
其中"+“是一个组合器函数
组合器是一个应用于两个元素的函数,并产生一个结果,该结果可以使用组合器与列表中的其余元素进行组合。
此外,还有更多关于折叠函数及其在函数式编程Fold (higher-order function)中的应用的详细信息
发布于 2016-01-07 07:41:57
术语与Map Reduce相同。唯一不同的是,与Map Reduce不同的是,map reduce只提供map和reduce函数来实现过滤、连接和聚合等逻辑,而Spark有许多函数。对于map reduce中的map reduce我们有spark中的map、flatMap、filter等,对于map reduce中的reduce我们有spark中的reduce、count、reduceByKey、countByKey、aggregateByKey、groupByKey、combineByKey等。
在Map Reduce中,如果你想在映射器端预先聚合,则需要指定组合器类,在spark组合器中,如果你使用reduceByKey,aggregateByKey,combineByKey。如果你不想使用组合器,那么你必须使用groupByKey函数。
对于您所询问的主题,map reduce和spark中的技术术语相同。但对于分布式缓存等主题,它是不同的,在Spark中它被称为广播。此外,即使术语相同,但它们的操作方式也有细微的差异。
https://stackoverflow.com/questions/34644181
复制相似问题