在 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 中将字典转换为数据框的主要内容,如果未能解决你的问题,请参考以下文章