提问人:alex23ro 提问时间:11/15/2023 更新时间:11/15/2023 访问量:51
为什么我不能直接在极坐标中写入 BytesIO 缓冲区?
Why can't I write to a BytesIO buffer directly in polars?
问:
在熊猫中,我可以做这样的事情:
buffer = BytesIO()
df.write_parquet(buffer)
# later, I can read the bytes
buffer.read()
但是当我在极地执行此操作时,缓冲区是空的。为什么会这样?
就上下文而言,我想这样做的原因是因为我喜欢使用库,这样我就可以直接将字节写入 s3 中。我知道还有其他方法可以实现这一点,例如使用 s3fs,但我想知道为什么直接写入缓冲区不起作用。cloudpathlib
答:
1赞
Dean MacGregor
11/15/2023
#1
缓冲区不是空的,你只是在它的尽头。这就像你在笔记本上的一张纸上写了几段,然后翻开页面,当你低头看笔记本时,它是空的。这并不是说笔记本没有“存储”你写的东西,只是它在你看的地方后面。
例如,这有效:
import polars as pl
from io import BytesIO
buffer=BytesIO()
df=pl.DataFrame({'a':[1,2,3]})
df.write_parquet(buffer)
buffer.seek(0) # This is what you need to do to start from the beginning and read.
print(pl.read_parquet(buffer))
shape: (3, 1)
┌─────┐
│ a │
│ --- │
│ i64 │
╞═════╡
│ 1 │
│ 2 │
│ 3 │
└─────┘
评论
0赞
alex23ro
11/15/2023
啊。这是有道理的。谢谢你的解释!
评论
.read()
BytesIO
.getvalue()