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

如何将Polars DataFrame直接以Parquet格式写入S3存储桶?

直接将Polars DataFrame以Parquet格式写入S3的方案

方法1:通过s3fs直接写入(推荐,简单高效)

Polars支持与fsspec兼容的文件系统,s3fs是其中之一,无需手动处理流,直接指定S3路径即可完成写入。

  1. 安装依赖:
pip install polars s3fs
  1. 示例代码:
import polars as pl
import s3fs

# 初始化S3文件系统(若已通过环境变量/凭证文件配置AWS权限,可省略此步)
s3_fs = s3fs.S3FileSystem(anon=False)

# 构造测试DataFrame(替换为你的实际数据)
df = pl.DataFrame({
    "id": [1, 2, 3],
    "value": ["foo", "bar", "baz"]
})

# 直接写入S3
df.write_parquet(
    path="s3://your-bucket-name/target/path/file.parquet",
    filesystem=s3_fs
)

方法2:通过BytesIO流 + boto3上传(适合需精细控制上传参数的场景)

如果需要自定义S3上传的额外参数(如ACL、存储类别),可以先将DataFrame写入内存字节流,再通过boto3上传。

  1. 安装依赖:
pip install polars boto3
  1. 示例代码:
import polars as pl
import boto3
from io import BytesIO

# 初始化S3客户端
s3_client = boto3.client("s3")

# 你的DataFrame
df = pl.DataFrame({
    "id": [1, 2, 3],
    "value": ["foo", "bar", "baz"]
})

# 将DataFrame写入内存缓冲区
buffer = BytesIO()
df.write_parquet(buffer)
buffer.seek(0)  # 重置流指针至起始位置

# 上传至S3,可添加自定义参数
s3_client.upload_fileobj(
    Fileobj=buffer,
    Bucket="your-bucket-name",
    Key="target/path/file.parquet",
    ExtraArgs={"ACL": "private", "StorageClass": "STANDARD_IA"}
)

注意事项

  • AWS凭证配置:确保已通过环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY)、~/.aws/credentials文件,或IAM角色(AWS服务内运行时)配置好合法的S3访问权限。
  • 大数据场景:若DataFrame体积较大,优先选择方法1,因为s3fs支持分块写入,避免内存溢出;方法2会将整个文件加载到内存,仅适合中小数据量。
  • Polars版本:建议使用v0.18.0及以上版本,旧版本对fsspec的支持可能存在兼容性问题。

内容的提问来源于stack exchange,提问作者rnd om

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:30:31