使用DuckDB-Python API将Dataframe写入S3存储桶为Parquet文件
将DuckDB Dataframe写入S3 Parquet文件的Python实现
前置准备
确保安装最新版DuckDB:
pip install duckdb
DuckDB v0.7及以上版本内置S3扩展,无需额外安装。
核心代码示例
import duckdb # 建立内存连接 con = duckdb.connect() # 加载S3扩展 con.execute("INSTALL s3;") con.execute("LOAD s3;") # 配置S3访问信息(可选,若已通过环境变量/实例角色授权可省略) con.execute("SET s3_access_key_id='你的Access Key';") con.execute("SET s3_secret_access_key='你的Secret Key';") con.execute("SET s3_region='你的存储桶区域,如us-east-1';") # 若你的Dataframe是Pandas对象,先注册为DuckDB表 # con.register('target_df', your_pandas_dataframe) # 写入S3 Parquet文件,针对5GB数据优化参数 con.execute(""" COPY target_df TO 's3://你的存储桶名/目标路径/output.parquet' (FORMAT PARQUET, COMPRESSION ZSTD, ROW_GROUP_SIZE 1000000) """) # 关闭连接 con.close()
关键参数说明
- COMPRESSION:推荐用
ZSTD,兼顾压缩率和读写性能,也可选择SNAPPY(更快)或GZIP(压缩率更高)。 - ROW_GROUP_SIZE:控制Parquet行组大小,100万行左右的设置适合5GB数据,避免单一行组过大导致内存压力。
- 分区写入:若需按字段分区存储,可添加
PARTITION BY 分区字段名,生成按分区划分的目录结构,便于后续高效查询。
授权方式补充
- 若运行环境是AWS EC2/EKS等已绑定IAM角色的资源,无需手动配置密钥,DuckDB会自动获取角色权限。
- 也可通过设置环境变量
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION来完成授权,代码中无需重复设置。
内容的提问来源于stack exchange,提问作者Sandeep540
相关产品推荐
相关产品推荐

