如何使用AWS Glue将多个CSV文件转换为Parquet格式
基于S3+Glue+Athena架构的CSV转Parquet落地流程
我目前正在用AWS的S3、Glue和Athena搭建数据查询架构,原始CSV文件存在S3里。因为Athena查询列式存储的Parquet效率更高、成本更低,所以我通过Glue完成了CSV到Parquet的转换,完整流程分享如下:
第一步:用Glue爬虫识别CSV数据源,构建元数据目录
先创建并运行Glue爬虫,指向存储CSV文件的S3路径。爬虫会自动解析CSV的schema,把字段类型、分区信息等元数据写入Glue数据目录,这样后续ETL作业就能直接调用这些元数据,不用手动编写表结构定义。第二步:编写并执行Glue ETL作业,将CSV转为Parquet格式
基于第一步生成的CSV数据目录,创建Glue ETL作业(可以用可视化拖拽编辑器,也可以写PySpark脚本)。核心逻辑是读取CSV表数据,按需做清洗或转换(如果不需要额外处理也可以直接转格式),最后把数据以Parquet格式写入S3的目标路径。这里建议开启分区和Snappy压缩,能进一步优化Athena的查询性能。给个简单的PySpark代码片段参考:
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 args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) # 从Glue数据目录读取CSV数据源 datasource = glueContext.create_dynamic_frame.from_catalog(database="your_csv_database", table_name="your_csv_table") # 将数据转为Parquet格式写入目标S3路径 datasink = glueContext.write_dynamic_frame.from_options( frame = datasource, connection_type = "s3", connection_options = {"path": "s3://your-parquet-bucket/target-folder/"}, format = "parquet" ) job.commit()第三步:用Glue爬虫识别Parquet数据源,更新数据目录
再次创建并运行Glue爬虫,指向存储Parquet文件的S3目标路径。爬虫会解析Parquet的schema并生成对应的表到Glue数据目录,之后Athena就能直接基于这个Parquet表做查询了——对比直接查CSV,Parquet的列式存储能让Athena扫描更少的数据,查询速度更快,账单也更友好。
内容的提问来源于stack exchange,提问作者mark s.
相关产品推荐
相关产品推荐

