我们如何用火花中的相同键来展平List

时间:2017-03-10 10:22:32

标签: scala

我有一个如下的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))

有人可以帮助我获得这个结果吗?

2 个答案:

答案 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)))