【问题标题】:Convert a list of dictionaries into pyspark dataframe将字典列表转换为 pyspark 数据框
【发布时间】:2021-05-21 20:08:19
【问题描述】:

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

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

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

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、执行程序 0):org .apache.spark.api.python.PythonException: 'pyspark.serializers.SerializationError: 由 Traceback 引起(最近一次调用最后一次):

我的代码有什么问题?

【问题讨论】:

    标签: python list dataframe apache-spark pyspark


    【解决方案1】:

    Spark 可能难以将 Python 字典转换为字符串。您可以在创建数据框之前将字典转换为字符串:

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

    【讨论】:

      【解决方案2】:

      您需要在创建数据框之前将字典转换为字符串。但是,我建议您不要将值存储为 stringfied dicts。稍后解析它们以进行进一步的转换并不容易。改用 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"}|
      #+--------------------------+
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多