我有一个Spark
Scala的问题,我想要计算Rdd数据的平均值,我创建一个像这样的新RDD,
[(2,110),(2,130),120),(3,200),206),(4,150),160),170)]
我想像他们一样数数,
[(2,(110+130+120)/3),(200+206+206)/3),(150+160+170)/3)]
然后,得到这样的结果,204),160)]
如何使用RDD中的scala执行此操作?
我使用火花版1.6
解决方法
你可以使用aggregateByKey.
val rdd = sc.parallelize(Seq((2,170))) val agg_rdd = rdd.aggregateByKey((0,0))((acc,value) => (acc._1 + value,acc._2 + 1),(acc1,acc2) => (acc1._1 + acc2._1,acc1._2 + acc2._2)) val sum = agg_rdd.mapValues(x => (x._1/x._2)) sum.collect