【问题标题】:Unable to read parquet file, giving Gzip code failed error无法读取 parquet 文件,导致 Gzip 代码失败错误
【发布时间】:2019-01-20 12:59:11
【问题描述】:

我正在尝试使用 pyarrow 将 parquet 转换为 csv 文件。

df = pd.read_parquet('test.parquet')

上述代码适用于从 github 下载的示例 parquet 文件。

但是当我尝试使用实际的大型镶木地板文件时,会出现以下错误。

File "_parquet.pyx", line 734, in pyarrow._parquet.ParquetReader.read_all
  File "error.pxi", line 79, in pyarrow.lib.check_status
pyarrow.lib.ArrowIOError: Arrow error: IOError: GZipCodec failed: incorrect header check

我也尝试使用 fastparquet 和 pyspark 读取 parquet 文件。但我遇到了类似的 GZip 错误。

我知道这是压缩或未压缩的镶木地板文件,与我下载的示例不同。

请建议任何代码或提供任何其他工具来将此类镶木地板文件转换为 csv 文件将有很大帮助。谢谢。

编辑:这些 parquet 文件似乎是二进制格式,而不是 parquet 中通常的字符串值。有没有办法读取二进制拼花?

【问题讨论】:

    标签: python-3.x pyspark parquet pyarrow fastparquet


    【解决方案1】:

    这听起来很像您的 Parquet 文件已损坏。 PySpark、Arrow 和 fastparquet 是 Parquet 格式的独立实现,因此很可能不是阅读器中的错误,而是损坏的文件。

    如果没有更多信息(例如该文件是如何编写的),唯一的答案是您将无法阅读它。

    否则pd.read_parquet(..).to_csv(..) 足以将 Parquet 文件转换为 CSV。

    【讨论】:

    • 感谢您的回复。我不确定文件是如何编写的,它被给我来验证文件中的源数据与目标配置单元表中的数据。如果文件被破坏,开发人员将无法将它们加载到目的地。但它已成功加载到配置单元中,我可以看到带有数据的表。我猜这是导致问题的原因是具有不同压缩类型的镶木地板文件类型。如果是这种情况,有什么方法可以读取压缩的镶木地板文件?
    • 这个文件似乎有一个有效的 Parquet 头,只有一个段损坏了 GZip 数据。因此,您使用的方式就是应该使用的方式。 Spark 使用与 Hive 相同的库来读取 Parquet 文件,这使得这个问题更加复杂。
    • 我知道这些是二进制格式的镶木地板文件。有什么方法可以读取这些拼花文件吗?
    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多