将RDD每行中的键值对列表转换为每行中的单个键值

时间:2019-02-24 17:04:37

标签: scala apache-spark rdd

我有一个RDD作为

List((a,b),(b,c))
List((d,e))

我怎么得到它

(a,b)
(b,c)
(d,e)

我尝试了RDD.flatMap(x => x),因为没有键值对列表,而不仅仅是值列表,所以这行不通。

1 个答案:

答案 0 :(得分:0)

rdd.flatMap(identity)会将RDD[List[(String, String)]]转换为RDD[(String, String)]

scala> val rdd = sc.parallelize(List(List(("a","b"),("b","c")), List(("d","e"))))
...
rdd: org.apache.spark.rdd.RDD[List[(String, String)]] = ParallelCollectionRDD[2] at parallelize at <console>:13
scala> rdd.flatMap(identity)
res2: org.apache.spark.rdd.RDD[(String, String)] = MapPartitionsRDD[3] at flatMap at <console>:14
scala> res2.collect()
...
res3: Array[(String, String)] = Array((a,b), (b,c), (d,e))

无论RDD[List[T]]的形状如何,这对于任何T都一样。 如果您分享了有关尝试操作的更多信息,可能会有所帮助。