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

AWS Glue执行unnest/relationalize后无法选取嵌套字段如何解决?

错误原因

你执行扁平化操作后,输出结构里的json.rowId是完整的字段名,而非层级访问路径。Glue DynamicFrame的select_fields方法默认会将参数里的.识别为嵌套结构的层级分隔符,执行select_fields(["json.rowId"])时,它会尝试先查找顶层名为json的struct字段,再提取该struct下的rowId子字段,但扁平化后的DynamicFrame已经不存在json这个顶层struct字段,因此无法匹配到对应字段,返回空结果。

解决方法

  • 方法1:转成Spark DataFrame操作,用反引号包裹带特殊字符的字段名
    from awsglue.dynamicframe import DynamicFrame
    
    # 转DataFrame后查询
    spark_df = dyF.toDF()
    result_df = spark_df.select("updatedAt", "`json.rowId`")
    # 若需要转回DynamicFrame
    result_dyF = DynamicFrame.fromDF(result_df, glueContext, "result_dyF")
    
  • 方法2:重命名字段消除特殊符号
    用apply_mapping将带点的字段重命名为无点的格式,后续直接用新名称查询:
    dyF_renamed = dyF.apply_mapping([
        ("updatedAt", "string", "updatedAt", "string"),
        ("`json.rowId`", "int", "json_row_id", "int")
    ])
    # 直接查询重命名后的字段
    result_dyF = dyF_renamed.select_fields(["updatedAt", "json_row_id"])
    
  • 方法3:跳过主动扁平化步骤,直接从原始DynamicFrame提取嵌套字段
    原始带struct结构的DynamicFrame本身就支持直接提取嵌套子字段,不需要先做扁平化:
    # original_dyF是你最初读取的未扁平化的DynamicFrame
    result_dyF = original_dyF.select_fields(["updatedAt", "json.rowId"])
    # 提取后可以按需重命名字段
    result_dyF = result_dyF.rename_field("json.rowId", "json_row_id")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:54:04