我是Spark的新手,我从这个星期开始。我有一个包含2列的表格:(id
,data
)
data
列包含我要反规范化的json / object / struct。
示例:
id = 123
data = {
"air_conditioning": {
"available": true
},
"tables": {
"available": true
},
"billiards": {
"available": false
},
"drinks": {
"available": true
}
}
我希望将此规范化为不同的行,例如:
id, key, value
123, air_conditioning, true
123, tables, true
123, billards, false
123, drinks, true
我当前的解决方案是循环dataframe.rdd.collect()
中的行,然后循环数据并创建一行并将其附加到列表中。
最后从该列表创建一个数据框。
示例:
new_rows = []
for row in df.rdd.collect():
for key, value in row.asDict(True).get('data').items():
facility = fac.filter((col('facility_key')==key) & (col('facility_mapping_key')==f_key)).collect()[0]
new_rows.append(
Row(
id=row['id'],
key=key,
value=value.get('available')
)
)
flattened_df = spark.createDataFrame(new_rows)
flattened_df.show(25)
但是我不确定这是最好的方法。
还有另一种方法吗?