我无法创建我需要的整个 PySpark Dataframe。我目前的字典是这种格式:
d = {0:
{'Key Features': ['Obese', 'Exercise']},
'Properties': {'Balding': True, 'Tall': False, 'Obese': True, 'Exercise': False}},
1:
{'Key Features': [None]},
'Properties': {'Balding': True, 'Tall': False, 'Obese': False, 'Exercise': True}},
...}
我想以这种格式创建一个资料框:
--------- ------ ------- ---------- ---------------------
|'Balding'|'Tall'|'Obese'|'Exercise'| 'Key Features'|
--------- ------ ------- ---------- ---------------------
| true| false| false| false|['Obese', 'Exercise']|
--------- ------ ------- ---------- ---------------------
| true| false| false| true| [None]|
--------- ------ ------- ---------- ---------------------
我能够使用以下代码为“属性”创建一个资料帧:
df = spark.createDataFrame([d[i]['Properties'] for i in d]).show()
输出此资料帧:
--------- ------ ------- ----------
|'Balding'|'Tall'|'Obese'|'Exercise'|
--------- ------ ------- ----------
| true| false| false| false|
--------- ------ ------- ----------
| true| false| false| true|
--------- ------ ------- ----------
我曾尝试添加这样的列,但失败了:
df.withColumn('Key Features', array(lit([d[i]['Key Features'] for i in d])
但它只是失败并且不会将串列添加为列。我试图创建一个这样的 DataFrame ,但它也不起作用:
df = spark.createDataFrame([d[i]['Key Features'] for i in d]).show()
输出:输入行没有架构所需的预期值数。提供 1 个值时需要 4 个栏位。
我将如何通过在 createDataFrame 的开头添加或使用 withColumn 将“关键功能”添加为包含在字典中的串列的列?
uj5u.com热心网友回复:
我认为您的示例输入d
有点格式错误,因为它'Properties'
与0
and处于同一级别1
,因此'Properties'
在顶层有多个键。鉴于您如何索引到d
,我将假设d
看起来像这样。如果我的假设有误,请告诉我,我会尽力纠正答案。
d = {
0: {
'Key Features': ['Obese', 'Exercise'],
'Properties': {'Balding': True, 'Tall': False, 'Obese': True, 'Exercise': False},
},
1: {
'Key Features': [None],
'Properties': {'Balding': True, 'Tall': False, 'Obese': False, 'Exercise': True},
},
}
您可以使用它创建所需的资料框。
df = spark.createDataFrame(
[
{"Key Features": v["Key Features"], **v["Properties"]}
for v in d.values()
]
)
df.show()
------- -------- ----------------- ----- -----
|Balding|Exercise| Key Features|Obese| Tall|
------- -------- ----------------- ----- -----
| true| false|[Obese, Exercise]| true|false|
| true| true| [null]|false|false|
------- -------- ----------------- ----- -----
0 评论