【问题标题】:Apache Parquet Could not read footer: java.io.IOException:Apache Parquet 无法读取页脚:java.io.IOException:
【发布时间】:2016-04-21 05:23:46
【问题描述】:

我有一个在 Cloudera VM 上运行的 SPARK 项目。在我的项目中,我从 parquet 文件加载数据,然后处理这些数据。一切正常,但问题是我需要在学校集群上运行这个项目,但是在这部分代码读取镶木地板文件时遇到问题:

DataFrame schemaRDF = sqlContext.parquetFile("/var/tmp/graphs/sib200.parquet");

我收到以下错误:

无法读取页脚:java.io.IOException:无法读取页脚 文件 FileStatus{path=file:/var/tmp/graphs/sib200.parquet/_common_metadata; 是目录=假;长度=413;复制=0;块大小=0; 修改时间=0;访问时间=0;所有者=;组=; 权限=rw-rw-rw-; isSymlink=false} 在 parquet.hadoop.ParquetFileReader.readAllFootersInParallel(ParquetFileReader.java:248) 在 org.apache.spark.sql.execution.datasources.parquet.ParquetRelation$$anonfun$28.apply(ParquetRelation.scala:750)

根据网上搜索,应该是parquet版本的问题。

我想从您那里告诉我如何在计算机中找到已安装的镶木地板版本,以检查两者是否具有相同的版本。或者另外,如果你知道这个错误的确切解决方案也是完美的!

【问题讨论】:

  • 嗨 Lavdërim,你解决了吗?
  • 如果是其他格式,比如.csv,您应该在阅读时指定format="com.databricks.spark.csv"

标签: java hadoop io apache-spark parquet


【解决方案1】:

你可以试试 sqlContex.read.load,而不是 sqlContext.parquetFile.?

请参考以下链接。 http://spark.apache.org/docs/latest/sql-programming-guide.html#generic-loadsave-functions

如果可行,请尝试告诉我。如果没有,我们可以尝试其他方式。

【讨论】:

    【解决方案2】:

    如果您打开 parquet 文件(文本编辑器),您会在最底部看到类似“parquet-mr”的内容,这可以帮助您了解文件的创建版本/格式

    上述方法虽然简单,但“创建者”可以是 impala 或其他可以创建 parquet 文件的组件,您可以使用 parquet-tools https://github.com/apache/parquet-mr/tree/master/parquet-tools

    因为看起来您正在使用 spark 来读取 parquet 文件,您可以通过将 spark.sql.parquet.filterPushdown 设置为 false 来解决它。也许先尝试一下(更多信息在这里 - https://spark.apache.org/docs/latest/sql-programming-guide.html#configuration - 将最新版本更改为您的 spark 版本)。

    如果这不起作用,那么如果这是最新版本的 spark 的问题,则可以尝试 - 如果是,那么您可以尝试跟踪修复它的提交的历史记录,这可能会让您了解可能的解决方法

    或者如果您知道 parquet 版本,您可以使用(切换)parquet-mr 的相应分支(为此构建 parquet-tools)并使用该版本的工具来测试您的元数据文件(_metadata、_common_metadata)或parquet 文件之一 - 您应该能够从那里重现错误并进行调试

    【讨论】:

      【解决方案3】:

      我在尝试从 S3 读取镶木地板文件时遇到了同样的问题。就我而言,问题是集群中的所有工作人员都无法使用所需的库。

      有两种方法可以解决这个问题:

      • 确保您在 spark-submit 命令中添加了依赖项,以便将其分发到整个集群
      • 在您的 SPARK_HOME 上的 /jars 目录中为集群中的每个工作程序添加依赖项。

      【讨论】:

      • 同样,当我尝试从我的本地机器上读取来自S3synced 的镶木地板文件时,我遇到了这个问题。有趣的是,在我删除了位于我正在阅读的同一目录中的 _spark_metadata 文件夹后,我并没有出现这个问题。
      【解决方案4】:

      检查您的文件夹权限。我们在其他环境中看到过这个错误,这是由于 Spark 没有访问该文件的权限造成的。

      【讨论】:

        猜你喜欢
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 2019-10-28
        • 2017-10-01
        相关资源
        最近更新 更多