在 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"]))
描述。如何在 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"]))