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());
}
});