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

使用AWS Glue ETL将多层嵌套数组拆分为独立行

在AWS Glue中展开多层嵌套JSON数组的解决方案

我懂你现在的需求——要把嵌套了两层数组的JSON拆成每行对应一个event,同时保留顶层的country、duration,还有state层级的stateId对吧?确实只用一次unnest()搞不定,得分步处理两层嵌套,我给你分享具体的实现步骤和代码:

处理思路

你的数据是顶层数组states → 每个state里嵌套events数组,所以我们需要分两步展开:

  1. 先展开外层的states数组,让每个state和顶层数据(country、duration)对应成一行
  2. 再展开每个state里的events数组,让每个event和上层的所有数据对应成一行

完整代码示例

1. 初始化Glue上下文

from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from pyspark.context import SparkContext

# 初始化Spark和Glue上下文
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

2. 读取原始JSON数据

这里以读取S3上的JSON文件为例,你可以根据实际数据源调整:

# 读取原始嵌套JSON
source_dyf = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://your-input-bucket/path/to/json-files/"]},
    format="json"
)

3. 分步展开嵌套数组

# 第一步:展开states数组,得到每个state对应的顶层数据
unnested_states = source_dyf.unnest(
    path="states",
    transform_ctx="unnest_states_step"
)

# 第二步:展开每个state下的events数组,得到最终的每行一个event的结构
final_dyf = unnested_states.unnest(
    path="events",
    transform_ctx="unnest_events_step"
)

4. (可选)展开parameters结构体

如果需要把parameters里的键值对也拆成单独列,可以再加一次unnest():

# 展开parameters嵌套结构体到单独字段
final_with_params_dyf = final_dyf.unnest(
    path="parameters",
    transform_ctx="unnest_parameters_step"
)

5. 验证结果并写入

# 转换成Spark DataFrame查看数据结构和内容
final_df = final_dyf.toDF()
final_df.printSchema()
final_df.show(truncate=False)

# 写入到目标存储(比如S3 Parquet格式)
glueContext.write_dynamic_frame.from_options(
    frame=final_dyf,
    connection_type="s3",
    connection_options={"path": "s3://your-output-bucket/processed-data/"},
    format="parquet",
    format_options={"compression": "snappy"}
)

关键说明

  • unnest()方法会自动保留上层所有字段,不用担心丢失country、duration或者stateId这些信息
  • 如果嵌套数组里存在null值,可以在unnest()里添加drop_null_fields=False参数来保留包含null的行
  • 如果你用的是Glue Studio可视化编辑器,也可以通过添加**"Unnest"**转换组件,分两次配置路径来实现同样的效果

内容的提问来源于stack exchange,提问作者Eric Keen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:51:45