【问题标题】: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 时,即使您只想读取列选择,也需要将整个文件解压缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-05
      • 2020-06-30
      • 2019-08-10
      • 2019-06-02
      • 2019-10-29
      • 2021-03-26
      • 1970-01-01
      • 2017-03-17
      相关资源
      最近更新 更多