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

使用AWS Glue从S3桶创建Dynamic Frame无返回值,求排查错误

问题分析与解决方法

可能的错误点及对应修复步骤

  1. S3路径配置错误

    • 确保connection_options里的paths是实际的S3路径,格式为s3://你的桶名/根文件夹/,指向包含所有日期子文件夹的根目录即可,Glue会自动递归读取子文件夹内的文件。
  2. JSON解析配置缺失

    • 你的JSON是多层嵌套结构,若每个文件是单个多行JSON对象(而非每行一个独立JSON),必须在formatOptions中设置"multiline": true,否则Spark/Glue会将每行视为独立JSON,导致解析失败返回空数据集。
    • 可添加"jsonPath": "$"明确指定读取完整的根节点结构,确保嵌套字段被正确解析。
  3. 代码语法与输出问题

    • df.count()仅调用计数方法但未打印结果,需改为print(df.count())才能看到实际数据量。
    • 创建DynamicFrame的代码块存在多余缩进,会引发语法错误,需调整缩进使其与上下文对齐。
    • 代码末尾缺少job.commit(),会导致Glue Job无法正常完成,需补充该语句。
  4. IAM权限不足

    • 检查Glue Job关联的IAM角色是否包含以下权限:
      • s3:GetObject:读取S3桶内的JSON文件
      • s3:ListBucket:遍历S3桶内的子文件夹和文件
    • 若权限缺失,需更新IAM角色的权限策略。

修正后的完整代码

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from functools import reduce
from awsglue.dynamicframe import DynamicFrame

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

df = glueContext.create_dynamic_frame.from_options(
    connection_type='s3',
    connection_options={'paths': ['s3://你的桶名/根文件夹/']},  # 替换为实际S3路径
    format='json',
    formatOptions={
        "multiline": True,
        "jsonPath": "$"
    }
)

print('Total Count:')
print(df.count())

job.commit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:50:17