【发布时间】:2019-03-19 21:07:16
【问题描述】:
我有一个 RDD List[(String, List[Int])] 像 List(("A",List(1,2,3,4)),("B",List(5,6,7 )))
如何将它们转换为 List(("A",1),("A",2),("A",3),("A",4),("B",5), ("B",6),("B",7))
然后操作将通过 key 减少并生成 List(("A",2.5)("B",6)) 之类的结果
我尝试过使用 map(e=>List(e._1,e._2)) 但它没有给出想要的结果。
“A”平均为 2.5,“B”平均为 6
帮助我完成这些转变和行动。 提前致谢
【问题讨论】:
-
后面的部分我已经弄清楚它如下所示:- val rdd_toreduce = spark.sparkContext.parallelize(List(("A",1.0),("A",2.0),("A ",3.0),("A",4.0),("B",5.0),("B",6.0),("B",7.0))) .mapValues(value => (value, 1)) .reduceByKey { case ((sumL, countL), (sumR, countR)) => (sumL + sumR, countL + countR) } .mapValues { case (sum , count) => sum / count } .collect rdd_toreduce.foreach( println)
标签: scala apache-spark rdd