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

Converting dictionary to a Data Frame in Pyspark

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

Error/Not 预期结果 我试过了

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

但得到:

TypeError: Can not infer schema for type: <class 'str'>

此代码:

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

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

预期结果:

我的数据集:

您对 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 是您在“我的数据集”图像中的原始词典。 然后,您可以按如下方式创建 spark 数据框:

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

这个dataframe将只有两列,第二列“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"]))