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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将RDD的每一行中的键值对列表转换为每行中的单个键值相关的知识,希望对你有一定的参考价值。

我关掉了RDD

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

我怎么能得到它

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

我尝试过RDD.flatMap(x => x),这不起作用,因为有一个键值对列表,而不仅仅是值列表。

答案

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。如果你分享了一些关于你尝试做什么的更多信息,可以提供更多帮助。

以上是关于将RDD的每一行中的键值对列表转换为每行中的单个键值的主要内容,如果未能解决你的问题,请参考以下文章

PySpark - 创建键值对时丢失字符串值

SQL Query 从一行中的单个表返回多个键值对

BigQuery:将数组中的键值对转换为列

如何从键值对列表中创建 Spark Row

3.9 Spark 键值对RDD编程

pig 新手,如何使用 pig 中的键值对子集将 JSON 转换为另一个 JSON?