foldByKey是Transformation算子,产生shuffle
只能是对偶元组
源码为:
传入初始值,和设定一个函数,
初始值+每个分区的相同key的value,进行局部聚合,
初始值在局部聚合每个分区用一次
全局聚合不使用val pairRDD = sc.parallelize(List(("cat",2), ("cat", 5), ("mouse", 4), ("cat", 12), ("dog", 12), ("mouse", 2)), 2) val value = pairRDD.foldByKey(100)(_ + _) 结果为(dog,112)(mouse,206)(cat,219)foldByKey和aggregateByKe的区别就是没有aggregateByKey灵活,
aggregateByKey可以定义局部聚合规则,和全局聚合规则,
foldByKey局部聚合和全局聚合的规则都是一样的