簡體   English   中英

Apache Parquet 無法讀取頁腳:java.io.IOException:

[英]Apache Parquet Could not read footer: java.io.IOException:

我有一個在 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)

根據在線搜索,這似乎是鑲木地板版本的問題。

我想從您那里得到的是告訴我如何在計算機中找到已安裝的鑲木地板版本,以便檢查兩者是否具有相同的版本。 或者另外,如果你知道這個錯誤的確切解決方案也將是完美的!

我在嘗試從 S3 讀取鑲木地板文件時遇到了同樣的問題。 在我的例子中,問題是集群中的所有工作人員都無法使用所需的庫。

有兩種方法可以解決這個問題:

  • 確保您在 spark-submit 命令上添加了依賴項,以便將其分發到整個集群
  • 為集群中的每個工作人員添加 SPARK_HOME 上 /jars 目錄的依賴項。

如果你打開一個拼花文件(文本編輯器),在最底部你會看到類似“parquet-mr”的東西,這可以幫助你知道文件是從什么版本/格式創建的

上面的方法雖然簡單,但“創建者”可以是其他東西,例如 impala 或其他可以創建 parquet 文件的組件,您可以使用 parquet-tools https://github.com/apache/parquet-mr/tree/master/parquet -工具

因為看起來您正在使用 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)或其中一個鑲木地板文件 - 你應該能夠從那里重現錯誤和調試

檢查您的文件夾權限。 我們在其他環境中看到過這個錯誤,它是由於 Spark 沒有訪問該文件的權限造成的。

你能試試 sqlContex.read.load,而不是 sqlContext.parquetFile 嗎?

請參考以下鏈接。 http://spark.apache.org/docs/latest/sql-programming-guide.html#generic-loadsave-functions

如果可行,請嘗試讓我知道。 如果沒有,我們可以嘗試其他方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM