Apache火花讀失敗與損壞的鑲花頁麵錯誤

一個損壞的鑲花當讀取數據可以發生頁麵錯誤,當快的讀者,讀者,矢量化讀者被啟用。

寫的何塞·岡薩雷斯

去年發表在:2022年5月20日

問題

你想讀數據拚花或δ格式,你得到一個損壞的鑲花頁麵錯誤。

. lang。RuntimeException:損壞的拚花在com.databricks.sql.io.parquet.NativeColumnReader頁麵。readBatchNative(本機方法)com.databricks.sql.io.parquet.NativeColumnReader.readBatch (NativeColumnReader.java: 477) com.databricks.sql.io.parquet.DatabricksVectorizedParquetRecordReader.nextBatch (DatabricksVectorizedParquetRecordReader.java: 346) org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextKeyValue (VectorizedParquetRecordReader.java: 159) org.apache.spark.sql.execution.datasources.RecordReaderIterator.hasNext (RecordReaderIterator.scala: 40) org.apache.spark.sql.execution.datasources.FileScanRDD立刻1美元立刻2.美元美元getnext (FileScanRDD.scala: 236) org.apache.spark.util.NextIterator.hasNext (NextIterator.scala: 73) org.apache.spark.sql.execution.datasources.FileScanRDD不久美元1.美元hasnext (FileScanRDD.scala: 204) org.apache.spark.sql.catalyst.expressions.GeneratedClass GeneratedIteratorForCodegenStage1美元。scan_nextBatch_0(未知源)在org.apache.spark.sql.catalyst.expressions.GeneratedClass GeneratedIteratorForCodegenStage1美元。agg_doAggregateWithoutKey_0(未知源)在org.apache.spark.sql.catalyst.expressions.GeneratedClass GeneratedIteratorForCodegenStage1美元。processNext(未知源)org.apache.spark.sql.execution.BufferedRowIterator.hasNext (BufferedRowIterator.java: 43) org.apache.spark.sql.execution.WholeStageCodegenExec anonfun 13美元立刻1.美元美元hasnext (WholeStageCodegenExec.scala: 640) scala.collection.Iterator不久美元11.美元hasnext (Iterator.scala: 409) org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write (BypassMergeSortShuffleWriter.java: 125) org.apache.spark.scheduler.ShuffleMapTask.runTask (ShuffleMapTask.scala: 99) org.apache.spark.scheduler.ShuffleMapTask.runTask (ShuffleMapTask.scala: 55) org.apache.spark.scheduler.Task.doRunTask (Task.scala: 139) org.apache.spark.scheduler.Task.run (Task.scala: 112) org.apache.spark.executor.Executor TaskRunner anonfun 13.美元美元申請(Executor.scala: 497)美元org.apache.spark.util.Utils .tryWithSafeFinally (Utils.scala: 1526)美元org.apache.spark.executor.Executor TaskRunner.run (Executor.scala: 503) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1149)美元java.util.concurrent.ThreadPoolExecutor Worker.run (ThreadPoolExecutor.java: 624) java.lang.Thread.run (Thread.java: 748)

導致

這個錯誤可以發生在鋪快讀者,讀者,矢量化讀者被啟用。

解決方案

如果你遇到損壞的鑲花頁麵錯誤,您應該禁用快速讀者,本地讀者,讀者和矢量化在集群或筆記本,然後讀操作再試。

如果錯誤仍然存在,即使這些選項禁用,打開一個與磚的支持。

刪除

信息

如果你在筆記本級別應用這些更改,他們隻適用於火花上下文。如果你在集群級別應用更改,它們適用於所有筆記本連接到集群。

禁用快速讀者

spark.databricks.io.parquet.fastreader.enabled在集群的火花配置(AWS|Azure|GCP)禁用快速鋪讀者在集群級別。

你也可以禁用快速讀者在筆記本級別通過運行:

% scala spark.conf.set (“spark.databricks.io.parquet.fastreader.enabled”,“假”)

禁用本地讀者

spark.databricks.io.parquet.nativeReader.enabled在集群的火花配置禁用本地集群級別鑲花的讀者。

你也可以禁用本地讀者在筆記本級別通過運行:

% scala spark.conf.set (“spark.databricks.io.parquet.nativeReader.enabled”,“假”)

禁用矢量化讀者

spark.sql.parquet.enableVectorizedReader在集群的火花配置禁用矢量化鋪讀者在集群級別。

你也可以禁用筆記本級別的矢量化讀者通過運行:

% scala spark.conf.set (“spark.sql.parquet.enableVectorizedReader”,“假”)
刪除

信息

矢量化鋪讀者使本地記錄級使用推過濾器過濾,提高內存位置和緩存的利用率。如果你禁用矢量化鑲花的讀者,可能有一個小的性能影響。