在PySpark中使用多个字典解包字符串列

0aydgbwb  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(134)

在Databricks中,我使用PySpark处理一个DataFrame,它有以下一列,其中每一行都是一个包含多个字典的列表:

我想解压缩/展开此列,以便每个字典值都有一个单独的列。但是,问题是此列的数据类型是字符串。如何解压缩此列?
以下是一个值的示例,以供参考:
[{“长名称”:“索菲亚”,“短名称”:“索非亚”,“类型”:[“地点”,“政治”]},{“长名称”:“索非亚市省”,“短名称”:“索非亚市省”,“类型”:[“行政区域级别1”,“政治”]},{“长名称”:“保加利亚”,“短名称”:“BG”,“类型”:[“国家”,“政治”]}]

qgelzfjb

qgelzfjb1#

使用from_json并提供模式,可以将字符串列转换为结构体数组。然后,可以执行inline将其分解为列。

df = spark.createDataFrame(
    [('[{"long_name":"Sofia","short_name":"Sofia","types":["locality","political"]},{"long_name":"Sofia City Province","short_name":"Sofia City Province","types":["administrative_area_level_1","political"]},{"long_name":"Bulgaria","short_name":"BG","types":["country","political"]}]',)],
    ['address_components'])

df = df.selectExpr(
    "inline(from_json(address_components, 'array<struct<long_name:string,short_name:string,types:array<string>>>'))"
)

df.show(truncate=0)

# +-------------------+-------------------+----------------------------------------+

# |long_name          |short_name         |types                                   |

# +-------------------+-------------------+----------------------------------------+

# |Sofia              |Sofia              |[locality, political]                   |

# |Sofia City Province|Sofia City Province|[administrative_area_level_1, political]|

# |Bulgaria           |BG                 |[country, political]                    |

# +-------------------+-------------------+----------------------------------------+

相关问题