如何在pyspark数据框中使用struct对列进行非规格化?

时间:2019-04-26 14:42:17

标签: apache-spark dataframe pyspark

我是Spark的新手,我从这个星期开始。我有一个包含2列的表格:(iddatadata列包含我要反规范化的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)

但是我不确定这是最好的方法。

还有另一种方法吗?

0 个答案:

没有答案