如何将 parquet bytes 对象作为 zip 文件写入磁盘

问题描述 投票:0回答:1

我从 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
。我从内存中创建 zip 文件的唯一链接中获取了信息:https://www.neilgrogan.com/py-bin-zip/

感谢您的帮助:)

python pandas zip byte parquet
1个回答
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 中时,即使您只想读取列选择,也需要解压缩整个文件。

© www.soinside.com 2019 - 2024. All rights reserved.