如何使用 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 表到 RedShift Spectrum 外部表的日期字段转换