我从 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/
感谢您的帮助:)
正确的做法是:
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 中时,即使您只想读取列选择,也需要解压缩整个文件。