aggregate用法 —先局部再全局计算
val rdd2= sc.parallelize(List(1,2,3,4,5,6,7,8),2)
其中rdd2被分为两个分区,0分区的数据是1,2,3,4;1分区的数据是5,6,7,8
rdd2.aggregate(0)(math.max(_,_),_+_) 结果是12
分析:初始值0和第一个分区的数据比较,取最大值4,然后初始值0和第二个分区的数据比较,取最大值8,然后全局相加,全局相加的时候0也要加一次,所以 4+8+0=12
rdd2.aggregate(5)(math.max(_,_),_+_) 结果是18
分析:初始值5和第一个分区的数据比较,取最大值5,然后初始值5和第二个分区的数据比较,取最大值8,然后全局相加,全局相加的时候0也要加一次,所以 5+8+5=18
rdd2.aggregate(5)(_+_,_+_) 结果是51
分析:初始值5和第一个分区的所有数据相加,得到1+2+3+4+5=15 ,初始值5和第二个分区的所有数据相加,得到5+6+7+8+5=31
然后全局相加 15 + 31 + 5= 51
val rdd1= sc.parallelize(List(“a”,“b”,“c”,“d”,“e”,“f”),2)
rdd1.aggregate("")(_+_,_+_) 结果可能是abcdef,也可能是defabc,因为是两个分区对应2个task,并行跑,谁先跑完就在最前