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

如何使用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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:07:05