在下面的字数统计示例中:
(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中使用的这种计算方法?谢谢!
答案 0 :(得分:1)
它不一定按这种方式聚合值。您认为MapReduce中的映射器如何工作?
你可以把它想象成一个hashmap。如果它看到键已经在hashmap中,它会递增该值,否则,它会将键插入hashmap,然后初始化该值。
你不能添加1 + 1 + 1 + 1 + 1而不添加1 + 1,+ 1,+ 1,+ 1,除非我忘了一些数学。
答案 1 :(得分:1)
Spark以更多功能的方式完成它,所以函数式编程术语应该适用于此。
rdd.reduce(_ + _)
是减少(弃/累积)功能:
有一些很好的解释here,所以我只是复制粘贴其中一些:
折叠(a.k.a.Reduce,Accumulate)是一个更高阶的函数,它以某种顺序处理(使用组合函数)元素列表并构建返回值
这里“+”是组合函数:
Combiner是一个应用于两个元素的函数,它产生的结果可以使用组合器与列表中的其余元素组合。
此外,有关折叠函数的更多详细信息及其在函数式编程中的应用Fold (higher-order function)
答案 2 :(得分:0)
术语与Map Reduce相同。与Map Reduce不同的是,只提供map和reduce函数来实现过滤,连接和聚合等逻辑,Spark有很多功能。对于map中的map,我们在spark中有map,flatMap,filter等,为了减少map减少我们在spark中减少,计数,reduceByKey,countByKey,aggregateByKey,groupByKey,combineByKey等。
在Map Reduce中,如果要在mapper端预聚合,则需要指定组合器类,如果使用reduceByKey,aggregateByKey,combineByKey,则使用spark combiner。如果您不想使用组合器,则必须使用groupByKey函数。
技术术语与您要求的主题的地图缩小和火花相同。但是对于诸如分布式缓存之类的主题它是不同的,在Spark中它被称为广播。即使术语相同,它们的运作方式也存在细微差别。