【问题标题】:How to write a parquet bytes object as zipfile to disk如何将镶木地板字节对象作为 zipfile 写入磁盘
【发布时间】:2020-03-20 13:13:36
【问题描述】:
我从一个 pandas 数据帧开始,我想将它保存为一个压缩的 parquet 文件,所有这些文件都在内存中,无需磁盘上的中间步骤。我有以下内容:
bytes_buffer = BytesIO()
df.to_parquet(bytes_buffer)
bytes_value= bytes_buffer.getvalue()
with ZipFile('example.zip', 'w') as zip_obj:
zip_obj.write(bytes_buffer.getvalue())
但我收到此编码错误:ValueError: stat: embedded null character in path。我从在内存中创建 zipfile 的唯一链接中获得了我的信息:https://www.neilgrogan.com/py-bin-zip/
感谢您的帮助:)
【问题讨论】:
标签:
python
pandas
zip
byte
parquet
【解决方案1】:
正确的做法是:
bytes_buffer = BytesIO()
df.to_parquet(bytes_buffer)
bytes_value= bytes_buffer.getvalue()
with ZipFile('example.zip', 'w') as zip_obj:
zip_obj.writestr('file.parquet', bytes_buffer.getvalue())
但是您不应该仅仅出于压缩原因将 Parquet 文件存储在 ZIP 中会消除 Parquet 格式本身的许多好处。默认情况下,Parquet 已经使用 Snappy 压缩代码进行了压缩(但您也可以使用 GZip、ZStandard 等)。压缩不是发生在文件级别,而是发生在列块级别。这意味着当您访问文件时,只需解压缩您要读取的部分。与此相反,当您将 Parquet 文件放入 ZIP 时,即使您只想读取列选择,也需要将整个文件解压缩。