foldByKey算子aggregateByKey算子


groupByKey,group,reduceByKey,foldByKey,aggregateByKey 都可以算作聚合类算子。

其中reduceByKey,foldByKey,aggregateByKey 效果很相似,下面记录一下他们的差别

这三个都是支持在Map端进行全局聚合的

foldByKey是一个柯里化的函数,第一个参数是初始值,第二个是函数。

可以很明显的在 

combineByKeyWithClassTag

函数中看到调用三次传入的函数,第一次对初始值和分区内同一个分组的数据进行,第二次将第一次的值和同一个分组内的下一个数据进行函数操作。第三次在全局聚合中使用。

aggregateByKey 是一个柯里化的函数,第一个参数是初始值,第二个是分区内使用的函数,第三个是全局聚合使用的函数。

可以很明显的在 

combineByKeyWithClassTag

函数中看到分区内的函数调用俩次,全局函数调用一次。第一次对初始值和分区内同一个分组的数据进行分区函数,第二次将第一次的值和同一个分组内的下一个数据进行分区函数操作。最后使用全局聚合函数

reduceByKey就只是一个普通的函数,只需要传入一个函数就可以了,

可以看到func函数被调用了俩次,在分区内对同组数据使用一次,在全局在使用一次。