Spark中combineByKey算子使用出现报错_spark

当使用combineByKey算子进行操作时,代码的要求是按照相同的key求相同key的平均值,所以我们希望获得对应的元组

("a",(3,2))
("b",(5,2))

其中key为原数据中的键,value为一个元组,该元组的第一个值代表数据之和,第二个代表次数

我们使用combineByKey就可以完成上述操作,首先将第一个value值映射为(value,1)

然后迭代每个对象,t._1+v代表不断用新的元组的key+原数据中的value,t._2+1代表每加一次次数+1

第三个匿名函数是用来进行不同分区之间的操作,将不同分区相同key对应value进行相加

上述代码报错的原因是t1和t2分别代表元组,此时编译器不能自动推断出类型,所以需要手动添加类型:

val value = rdd.combineByKey(
v => (v, 1),
(t: (Int, Int), v) => {
(t._1 + v, t._2 + 1)
},
(t1: (Int, Int), t2: (Int, Int)) => {
(t1._1 + t2._1, t1._2 + t2._2)
}
)