AWS Glue relationalize未将数据存储至S3问题排查
问题原因及解决办法
核心原因
relationalize仅完成数据拆分,未自动写入S3
relationalize方法的作用是把嵌套结构的DynamicFrame拆分为多个扁平的DynamicFrame集合(DynamicFrameCollection),传入的staging_path只是用于拆分过程中的临时中间存储,不会自动将最终拆分结果持久化到S3。必须手动遍历这个集合,执行写入操作才能把数据传到S3。交互式会话的本地缓存机制
Glue交互式会话默认会将处理数据先缓存到worker节点的本地文件系统(如/tmp),如果数据量超过节点本地存储上限,就会触发存储耗尽。若未显式执行S3写入,这些缓存数据只会留在本地,不会自动上传。路径渲染可能存在问题
虽然角色权限足够,但要确认aws_account_id和aws_region变量是否正确渲染出合法的S3路径,若路径有误(比如账号ID/区域拼写错误),交互式会话会 fallback 到本地存储,且不会即时报错。
解决步骤
- 手动写入拆分后的DynamicFrame到S3
遍历df_contracts_rel中的每个表,调用写入方法将数据传到S3:
# 遍历所有拆分后的表 for table_name, df in df_contracts_rel.items(): glue_context.write_dynamic_frame.from_options( frame=df, connection_type="s3", connection_options={"path": f"s3://data-export-{aws_account_id}-{aws_region}/final_tables/{table_name}/"}, format="parquet" # 可替换为csv、json等格式 )
调整交互式会话的worker配置
如果数据量较大,启动会话时选择本地存储更大的worker类型(如G.2X、G.4X),或增加worker数量,避免本地存储被快速耗尽。验证S3路径正确性
先打印实际生成的路径,确认桶和路径存在且可访问:
print(f"目标临时路径: s3://data-export-{aws_account_id}-{aws_region}/temporary/relationalized/")
内容的提问来源于stack exchange,提问作者Martin Macak
相关产品推荐
相关产品推荐

