将每个分区里面的元素进行聚合,然后用combine函数将每个分区的结果和初始值进行combine操作
开启分区的效果:
val rdd1 = List(1,2,3,4,5)
val result: Int = rdd1.par.aggregate(0)(
(acc, number) => {
val res1 = acc + number
println("par " + acc + " + " + number+" = "+res1)
res1
},
(par1, par2) => {
val res2 = par1 + par2
println("com " + par1 + " + " + par2+" = "+res2)
res2
}
)
println(result)
运行结果:
par 0 + 1 = 1
par 0 + 2 = 2
com 1 + 2 = 3
par 0 + 3 = 3
par 3 + 4 = 7
par 7 + 5 = 12
com 3 + 12 = 15
结果:15
不开启分区的效果如下:
val rdd1 = List(1,2,3,4,5)
val result: Int = rdd1.aggregate(0)(
(acc, number) => {
val res1 = acc + number
println("par " + acc + " + " + number+" = "+res1)
res1
},
(par1, par2) => {
val res2 = par1 + par2
println("com " + par1 + " + " + par2+" = "+res2)
res2
}
)
println(result)
运行结果:
par 0 + 1 = 1
par 1 + 2 = 3
par 3 + 3 = 6
par 6 + 4 = 10
par 10 + 5 = 15
结果:15