我有一个如下的RDD
Array[(String, List[Int])] = Array((2008,List(40, 20)), (2000,List(30, 10)), (2001,List(9)))
我希望压缩同一个键的值。
预期产出:
Array[(String, Int)]
Array((2008,40) ,(2008,20) ,(2000,30),(2000,10),(2001,9))
有人可以帮助我获得这个结果吗?
答案 0 :(得分:1)
将每个元组转换为元组列表,然后使用flatten:
scala> val arr = Array(("2008", List(40, 20)), ("2000", List(30, 10)), ("2001", List(9)))
arr: Array[(String, List[Int])] = Array((2008,List(40, 20)), (2000,List(30, 10)), (2001,List(9)))
scala> arr.map { case (s, list) => list map { i => (s, i) } }.flatten
res3: Array[(String, Int)] = Array((2008,40), (2008,20), (2000,30), (2000,10), (2001,9))
答案 1 :(得分:1)
我会尝试这样的事情:
val l = Array((2008,List(40, 20)), (2000,List(30, 10)), (2001,List(9)))
l.flatMap(pair => pair._2.map(listElem => (pair._1, listElem)))