Spark:运行时减少元素的技术术语?

时间:2016-01-06 22:36:55

标签: java hadoop apache-spark mapreduce

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

(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 个答案:

答案 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中它被称为广播。即使术语相同,它们的运作方式也存在细微差别。