RDDaggregateByKey操作官方api:
aggregateByKey(U zeroValue, Function2<U,V,U> seqFunc, Function2<U,U,U> combFunc)
U zeroValue为定义初始数据;
Function2<U,V,U> seqFunc中第一个U是初始数据的U,v是传入数据,第二个U是返回数据;
Function2<U,U,U> combFunc,第一个U是累计数据,第二个U是传入数据,第三个U是返回数据。
(个人理解,不对请指正。)
同时计算sum和count的样例代码如下:
JavaPairRDD<String, String> allMsg= 。。。
JavaPairRDD<String,Tuple2<Double,Integer>>
result
=
allMsg
.aggregateByKey(
new
Tuple2
<Double,Integer>
(0.0d,0),
new
Function2<Tuple2<Double,Integer>, String, Tuple2<Double,Integer>>(){
@Override
public
Tuple2 call(Tuple2<Double,Integer>
v1
, String
v2
) {
return
new
Tuple2<>(
v1
._1() + Double.parseDouble(
v2
) ,
v1
._2() + 1);
}
},
new
Function2<Tuple2<Double,Integer>, Tuple2<Double,Integer>, Tuple2<Double,Integer>>(){
@Override
public
Tuple2<Double,Integer> call(Tuple2<Double,Integer>
v1
, Tuple2<Double,Integer>
v2
) {
return
new
Tuple2<>(
v1
._1() +
v2
._1() ,
v1
._2() +
v2
._2());
}
});