新手求助:使用PySpark与AWS Glue从S3读取Parquet并写入CSV
AWS Glue 读取S3 Parquet文件并导出为CSV的修正实现
你的代码存在几处语法错误和逻辑遗漏,以下是修正后的完整代码,同时补充了实用配置:
from pyspark.context import SparkContext from awsglue.context import GlueContext # 初始化上下文 sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) spark = glueContext.spark_session # 读取S3中的Parquet文件 dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type="s3", connection_options={"paths": ["s3://path/abc.parquet/"]}, # 修正为列表格式,括号匹配 format="parquet" ) # 将数据写入S3为CSV文件 glueContext.write_dynamic_frame.from_options( frame=dynamicFrame, # 必须指定要写入的DynamicFrame对象 connection_type="s3", connection_options={"paths": ["s3://path/abc/"]}, # 修正路径格式,确保输出目录正确 format="csv", format_options={ "separator": ",", "header": "true" # 添加表头,提升CSV文件可读性 } )
关键修正点说明:
- 变量名修正:
dynamicFramne拼写错误改为dynamicFrame - 路径格式修正:
connection_options里的paths必须是列表类型(用[]包裹),原代码错误使用了字典符号{}且括号不匹配 - 写入对象指定:
write_dynamic_frame.from_options必须通过frame参数传入要导出的DynamicFrame,原代码遗漏了这个核心参数 - CSV配置优化:添加
"header": "true"让CSV文件包含列名,这是数据分析场景的常用需求 - 语法细节:移除了
format_options中多余的末尾逗号,避免语法解析报错
额外注意事项:
- 确保AWS Glue作业的IAM角色拥有目标S3存储桶的读写权限
- 输出路径
s3://path/abc/会自动生成多个分区CSV文件(Spark分布式特性),若需单个文件,可将DynamicFrame转为DataFrame后用coalesce(1)合并再写入,但大文件不推荐此操作 - 若Parquet文件有分区结构,可在
connection_options中添加"recurse": True确保读取所有子目录下的文件
内容的提问来源于stack exchange,提问作者Murshed Syed
相关产品推荐
相关产品推荐

