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

为何无法直接向Polars中的BytesIO缓冲区写入数据?

Polars写入BytesIO后缓冲区为空的原因及解决方法

在Pandas中,df.write_parquet(buffer)执行完成后,会自动将缓冲区的文件指针重置到起始位置,所以后续调用buffer.read()能正常读取到写入的内容。

但Polars的write_parquet方法不会自动重置文件指针——当写入操作完成时,指针停留在缓冲区的末尾位置,此时调用buffer.read()自然读不到任何内容。

解决方法很简单,在读取缓冲区之前手动将指针移到起始位置即可:

from io import BytesIO
import polars as pl

# 创建示例DataFrame
df = pl.DataFrame({"a": [1, 2, 3], "b": ["x", "y", "z"]})

buffer = BytesIO()
df.write_parquet(buffer)
# 关键步骤:将文件指针移回缓冲区开头
buffer.seek(0)

# 现在可以正常读取字节内容了
parquet_bytes = buffer.read()

如果要配合cloudpathlib直接写入S3,修正后的流程可以这样写:

from cloudpathlib import S3Path
from io import BytesIO
import polars as pl

df = pl.DataFrame({"a": [1, 2, 3], "b": ["x", "y", "z"]})
buffer = BytesIO()

df.write_parquet(buffer)
buffer.seek(0)

# 直接将字节写入S3路径
s3_path = S3Path("s3://your-bucket/path/to/file.parquet")
s3_path.write_bytes(buffer.read())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:59:54