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



在下面的字数示例中:

(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中它被称为广播。尽管术语相同,但它们的操作方式也有细微的差异。

相关内容

  • 没有找到相关文章

最新更新