Glue动态框架无法从S3存储桶加载数据问题求助
Glue任务加载S3 Parquet文件时Dynamic Frame为空的排查方案
问题描述
直接指定S3上存在数据的Parquet文件路径,但Glue的Dynamic Frame加载后为空,同类配置的任务可正常运行(已关闭书签功能)。示例代码如下:
input_dyf = glueContext.create_dynamic_frame.from_options("s3", { "paths": ['s3://dev/.test/load_year=2023/load_month=2/load_day=22/.test.parquet'], "recurse": False, "groupFiles": "inPartition", }, format = "parquet", transformation_ctx = "DataSource0" )
排查与解决步骤
- 检查隐藏文件规则
Glue默认会忽略文件名以.开头的隐藏文件,当前目标文件.test.parquet属于此类。尝试将文件名修改为非隐藏格式(如test.parquet)后重新测试。 - 验证Parquet文件有效性
使用AWS CLI命令校验文件是否为有效Parquet格式且包含数据:aws s3 cp s3://dev/.test/load_year=2023/load_month=2/load_day=22/.test.parquet - | parquet-tools head - 调整文件分组参数
当前设置groupFiles: "inPartition",但直接指向单个文件时该参数不适用。尝试移除groupFiles配置,或改为groupFiles: "none"。 - 确认IAM角色权限
检查该任务使用的IAM角色是否拥有目标S3路径的s3:GetObject权限,即使同类任务权限相同,也可能存在隐藏目录/文件的权限差异。 - 添加数据校验日志
在代码中添加日志输出,查看Dynamic Frame的加载详情:
运行任务后查看CloudWatch日志,确认是否存在加载报错或元数据异常。print(f"Dynamic Frame记录数: {input_dyf.count()}") input_dyf.printSchema() - 关闭分区推断
路径包含load_year=2023这类分区键,直接指向单个文件时Glue可能因分区推断逻辑导致加载异常。尝试关闭分区推断:input_dyf = glueContext.create_dynamic_frame.from_options("s3", { "paths": ['s3://dev/.test/load_year=2023/load_month=2/load_day=22/.test.parquet'], "recurse": False, "groupFiles": "none", "enablePartitioning": False }, format = "parquet", transformation_ctx = "DataSource0" )
内容的提问来源于stack exchange,提问作者Conn0r121
相关产品推荐
相关产品推荐

