在 Pyspark 中将字典转换为数据框

Posted

技术标签:

【中文标题】在 Pyspark 中将字典转换为数据框【英文标题】:Converting dictionary to a Data Frame in Pyspark 【发布时间】:2021-12-04 13:39:35 【问题描述】:

说明。如何在 PySpark 中将字典数据集转换为 DataFrame:

错误/非预期结果我试过了

df = spark.createDataFrame([Row(**i) for i in bounds]) 

但得到:

TypeError:无法推断类型的架构:

这段代码:

rdd = sc.parallelize(bounds)
rdd.map(lambda x: (x,)).toDF().show()

和其他人给出了意想不到的结果。

预期结果

我的数据集

【问题讨论】:

我已经查看了 *** 中的所有解决方案,但它们没有帮助。我是 Pyspark 的新手。 【参考方案1】:

您对 createDataFrame() 的输入格式不正确。它应该看起来像这样 -

[("price", "q1":1, "q3": 3, "upper": 10, "lower":2 ), 
 ("carAge", "q1":1, "q3": 3, "upper": 11, "lower":1)]

这是一个元组列表(列表列表也可以),其中每个元组有两个元素,第一个是字符串,第二个是字典。每个元组包含未来 spark 数据帧中的所有行数据,元组中的两个元素意味着您将创建的数据帧中将有 2 列。

要将您的字典数据转换为上述格式,请使用以下代码:

[(x, dct[x]) for x in dct.keys()]

其中 dct 是您在 My DataSet 图像中的原始字典。 然后,您可以按如下方式创建 spark 数据框:

df = (spark.createDataFrame([(x, dct[x]) for x in dct.keys()], 
                                                   schema=["Colums", "dct_col"]))

这个数据框将只有两列,第二列,“dct_col”将是字典列,你可以得到“q1”、“q3”和其他列,如下所示:

df_expected_result = (df
                      .withColumn("q1", df.dct_col["q1"])
                      .withColumn("q3", df.dct_col["q3"])
                      .withColumn("lower", df.dct_col["lower"])
                      .withColumn("upper", df.dct_col["upper"]))

【讨论】:

以上是关于在 Pyspark 中将字典转换为数据框的主要内容,如果未能解决你的问题,请参考以下文章

需要在pyspark中将列表转换为数据框

如何在 PySpark 中将字符串转换为字典 (JSON) 的 ArrayType

将 pyspark 数据框转换为 python 字典列表

将嵌套字典键值转换为 pyspark 数据框

在不使用熊猫的情况下将数据框转换为pyspark中的字典

如何在pyspark中将rdd行转换为带有json结构的数据框?