如何在scala中使用combineByKey在scala中添加多维元组
val inputrdd = sc.parallelize(Seq(("maths", (50,2)), ("maths", (60,1)), ("english", (65,2)), ("physics", (66,3)), ("physics", (60,2)), ("physics", (87,1))))
这样我收到的输出为: (英语,65,2),(数学,110,3)......
答案 0 :(得分:1)
此处没有理由使用combineByKey
。它可以通过简单的reduce
轻松处理:
inputrdd
.reduceByKey{case ((x1, x2), (y1, y2)) => (x1 + y1, x2 + y2)}
.map{case (k, (v1, v2)) => (k, v1, v2)}
答案 1 :(得分:0)
你应该使用reduceByKey:
inputrdd.reduceByKey((x:(Int,Int), y:(Int,Int)) => (x._1+y._1,x._2+y._2))
inputrdd.collect()
答案 2 :(得分:0)
使用combineByKey
的解决方案下方 inputrdd.combineByKey((x:(Int,Int))=>(x._1,x._2),(u:(Int,Int),v:(Int,Int))=>(u._1+v._1,u._2+v._2),(acc1:(Int,Int),acc2:(Int,Int))=>(acc1._1+acc2._1,acc1._2+acc2._2)).collect
res135: Array[(String, (Int, Int))] = Array((maths,(110,3)), (physics,(213,6)), (english,(65,2)))