You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AWS Glue get-tables的JSON输出转换为结构化PySpark DataFrame

你当前看到的单列是因为AWS Glue get-tables 接口返回的JSON最外层就是TableList数组字段,每个数组元素对应一张表的完整元数据结构,只需要展开数组+提取struct字段即可得到你想要的结构。

解决方案

基础展开(保留原struct嵌套结构)

先通过explode函数把数组拆分为每行一张表,再提取struct内的所有字段作为顶层列:

from pyspark.sql.functions import explode

# 读入JSON(你的原有代码)
df = spark.read.option("inferSchema", "true") \
   .option("multiline", "true") \
   .json("tmp/my_json.json")

# 1. 炸开TableList数组,每行对应一张表
df_exploded = df.select(explode("TableList").alias("table_detail"))

# 2. 提取struct内所有字段为顶层列
df_result = df_exploded.select("table_detail.*")

此时df_result的schema就和你之前printSchema输出中TableList.element的结构完全一致,保留原有的嵌套struct结构。

进阶:全自动展开所有嵌套struct

如果你需要把所有嵌套的Parameters、StorageDescriptor等struct都展开为独立的顶层列,可以用通用递归展开函数:

from pyspark.sql.types import StructType

def flatten_all_structs(df):
    # 递归展开所有嵌套struct,字段名自动用下划线拼接避免重名
    fields = []
    def recurse(schema, prefix=""):
        for field in schema.fields:
            if isinstance(field.dataType, StructType):
                recurse(field.dataType, prefix + field.name + "_")
            else:
                fields.append(f"{prefix[:-1]}.{field.name} AS {prefix}{field.name}")
    recurse(df.schema)
    return df.selectExpr(fields)

# 调用即可得到完全扁平化的DataFrame
df_flat = flatten_all_structs(df_result)

内容的提问来源于stack exchange,提问作者Lucas Mignone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:18:02