将字典列表转换为pysparkDataframe

p8ekf7hl  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(725)

我有一个字典列表,如下所示。每本字典都是一个列表项。

my_list= [{"_id":1,"name":"xxx"},
    {"_id":2,"name":"yyy"},
    {"_id":3,"_name":"zzz"}]

我正在尝试将列表转换为pysparkDataframe,每个字典都是一行。

from pyspark.sql.types import StringType

df = spark.createDataFrame(my_list, StringType())

df.show()

我的理想结果如下:

+-----------------------------------------+
|                                    dic|
+-----------------------------------------+
|{"_id":1,"name":"xxx"}|
|{"_id":2,"name":"yyy"}|
|{"_id":3,"_name":"zzz"}|
+-----------------------------------------+

但我错了:
org.apache.spark.sparkexception:由于阶段失败而中止作业:阶段25.0中的任务0失败了4次,最近的失败:阶段25.0中丢失了任务0.3(tid 95,10.0.16.11,executor 0):org.apache.spark.api.pythonnexception:'pyspark.serializers.serializationerror:由回溯引起(最近的调用最后一次):
我的代码怎么了?

mf98qq94

mf98qq941#

spark可能很难将python词典转换为字符串。在创建Dataframe之前,可以将字典转换为字符串:

df = spark.createDataFrame([str(i) for i in my_list], StringType())
qv7cva1a

qv7cva1a2#

在创建Dataframe之前,需要将dict转换为字符串。但是,我建议您不要将值存储为字符串化的dict。为以后的进一步转换解析它们并不容易。改用json字符串:

import json

df = spark.createDataFrame([[json.dumps(d)] for d in my_list], ["dict"])

df.show(truncate=False)

# +--------------------------+

# |dict                      |

# +--------------------------+

# |{"_id": 1, "name": "xxx"} |

# |{"_id": 2, "name": "yyy"} |

# |{"_id": 3, "_name": "zzz"}|

# +--------------------------+

相关问题