Spark中combineByKey算子使用出现报错
原创
©著作权归作者所有:来自51CTO博客作者Lineage_的原创作品,请联系作者获取转载授权,否则将追究法律责任

当使用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)
}
)