如何使用 AWS Glue 从嵌套 json 字段/结构中的 DynamicFrame 访问数据

Posted

技术标签:

【中文标题】如何使用 AWS Glue 从嵌套 json 字段/结构中的 DynamicFrame 访问数据【英文标题】:How can I access data from a DynamicFrame in nested json fields / structs with AWS Glue 【发布时间】:2021-11-26 12:56:20 【问题描述】:

在 AWS Glue DynamicFrame 的 Map.apply() 函数中,我尝试从嵌套的 json 列访问数据,但返回的 DynamicFrame 为空。

数据结构:

root
|-- id: string
|-- policyId: string
|-- productId: string
|-- createdBy: string
|-- status: string
|-- data: struct
|    |-- values: struct
|    |    |-- G1Q1: string
|    |    |-- G1Q2: string

我的代码:

dyf1 = glueContext.create_dynamic_frame.from_catalog(
    database="db",
    table_name="table1",
    transformation_ctx="table_1",
)

dyf1 = Unbox.apply(frame = dyf1, path = "data", format = "json")


def ProcessEntry(r):
    r["question1"] = r.data.values.G1Q1
    return r

dyf2 = Map.apply(frame = dyf1, f = ProcessEntry)


dyf2.toDF().show()

我也试过用这个:

   r["question1"] = `r.data.values.G1Q1`

还有这个:

   r["question1"] = r["data.values.G1Q1"]

但是返回的结果总是空的,而不是带有附加列“question1”和嵌套列中的值的完整 DataFrame:

++
||
++
++

如何在 Map.apply() 函数中正确访问(未装箱)DataFrame 中的(嵌套)值?

【问题讨论】:

【参考方案1】:

终于自己从这个链接中弄清楚了: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-transforms-map.html

它需要 Python 字典语法:

r["question1"] = r["data"]["values"]["G1Q1"]

【讨论】:

以上是关于如何使用 AWS Glue 从嵌套 json 字段/结构中的 DynamicFrame 访问数据的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue - Redshift 中具有 Json 结构的字段

AWS Glue:如何处理具有不同架构的嵌套 JSON

从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换

如何查询数组字段(AWS Glue)?

如何从aws glue pyspark作业中的嵌套数组中提取数据

AWS Glue:如何将嵌套的 Hive 结构扩展到 Dict?