为何无法直接向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
相关产品推荐
相关产品推荐

