首页 > 解决方案 > 从键值的RDD创建DataFrame,列表为值

问题描述

我有一个如下的rdd

rdd_1 = ['"columns":["date","appname","appenv","appstate"]']

我想将其转换为如下所示的数据框

+---------+
| columns |
+---------+
|date     |
|appname  |
|appenv   |
|appstate |
+---------+

我尝试了什么:我厌倦了创建如下模式并使用它来创建数据框,但这不起作用

rdd_1_schema = StructType(
    [
        StructField('columns',ArrayType(StringType()))
    ])

带有架构的错误输出如下

rdd1.toDF(schema=rdd_1_schema).show()

错误:

TypeError: StructType can not accept object '"columns": in type <type 'str'>

第二次尝试:我尝试使用平面图

rdd1.flatMap(lambda x: map(lambda e: (x[0], e), x[1])).toDF().show()

但它将每个字符串作为列表的元素,例如下面的输出

+---+---+
| _1| _2|
+---+---+
| ''|  c|
+---+---+

标签: pythonapache-sparkpysparkapache-spark-sql

解决方案


推荐阅读