【问题标题】:unable to read parquet files from directory with pyarrow无法使用 pyarrow 从目录中读取镶木地板文件
【发布时间】:2020-03-05 07:44:34
【问题描述】:

我正在使用 pyarrow(0.12.1) 从 s3 读取镶木地板对象

这是我正在使用的代码:

s3 = s3fs.S3FileSystem()
base_pya_dataset = ParquetDataset('s3://bucket1/source/schema/table_name/2019_10_31_19_59_16', filesystem=s3)

尝试创建 ParquetDataset 时出现以下错误:

"errorMessage": "Corrupted file, smaller than file footer",
  "errorType": "ArrowIOError",

我做错了什么?让我非常困惑的是我之前(昨天)有这个工作。除了我正在使用的镶木地板文件之外,我所能发现的一切都没有改变。 parquet 文件必须是某种类型吗?

我已经尝试过: - 添加尾部正斜杠

当我向它提供一个文件的路径时,它可以工作。显然,它试图从我提供的目录中获取文件的方式有问题。

【问题讨论】:

    标签: python-3.x pyarrow


    【解决方案1】:

    我知道这是一个老问题,但这个错误最近出现在我身上。如果您包含文件系统参数,我相信您的文件路径中不应有 "s3://" 前缀。

    查看此作为参考:https://issues.apache.org/jira/browse/ARROW-10937

    【讨论】:

      【解决方案2】:

      经过更多测试,ParquetDataset 功能似乎不能简单地用于目录中的 parquet 文件(甚至单个文件)(即使它们都具有相同的架构)。当我将分区 parquet 文件放在一个目录中时(从 spark 输出),我没有收到任何错误。

      即使我从 spark 下载这些分区 parquet 文件,然后将它们重新上传到 s3,读取也会失败。我无法想象下载 parquet 文件然后将它们重新上传到 s3 会如何将架构弄乱到引发异常的地步(尤其是因为我没有打开或修改实际的 parquet 文件)。

      这很奇怪,因为依赖它会让人有点不安。

      【讨论】:

      【解决方案3】:

      该错误可能意味着它正在尝试读取不是 Parquet 的文件。

      我建议升级到最新版本的 pyarrow (0.15.1) 并重试。自 0.12.1 以来已经有了很多发展,您遇到的任何问题都有可能得到解决。

      【讨论】:

      • 感谢您的想法。我 100% 确定它们是有效的镶木地板文件,因为当我将值直接传递给镶木地板文件(而不是路径)时,它会正确读取它。我运行旧版本的原因也是因为 pyarrow在 0.12.1 之后体积膨胀到 lambda 无法接受的程度。如果您有任何解决此问题的想法,请告诉我
      • 我想知道是否有隐藏文件或其他东西被添加到扫描仪阻塞的存储桶中。这就是我上周做类似事情时发生的事情,导致issues.apache.org/jira/browse/ARROW-7062
      • 关于轮子的大小,如果这阻碍了您,我建议您在issues.apache.org/jira/browse/ARROW-5082 上发表评论。我不确定社区是否意识到车轮尺寸是某些用例的障碍,而不仅仅是烦恼。
      • 谢谢,我会发布我发现的内容,尽管我相信这远非解决方案。最近的拉取请求似乎确实会为我提供更多有用的诊断信息。
      猜你喜欢
      • 2018-05-06
      • 2019-10-27
      • 2018-03-29
      • 2019-08-04
      • 1970-01-01
      • 2021-11-10
      • 2017-12-18
      • 2022-11-03
      • 2016-09-12
      相关资源
      最近更新 更多