2016-02-09 14 views
0

我如何在Scala中使用combineByKey添加多维元组在斯卡拉使用combineByKey添加列表的相应值

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)...

回答

1

在这里没有理由使用combineByKey。它可以通过简单的reduce好办:

inputrdd 
    .reduceByKey{case ((x1, x2), (y1, y2)) => (x1 + y1, x2 + y2)} 
    .map{case (k, (v1, v2)) => (k, v1, v2)} 
0

你应该使用reduceByKey代替:

inputrdd.reduceByKey((x:(Int,Int), y:(Int,Int)) => (x._1+y._1,x._2+y._2)) 
inputrdd.collect() 
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))) 
解决以下
相关问题