工作與NoSuchElementException失敗錯誤

NoSuchElementException錯誤可能發生在使用Apache箭頭。

寫的阿施施

去年發表在:2023年3月3日

問題

你得到間歇工作的失敗NoSuchElementException錯誤。

例子堆棧跟蹤

Py4JJavaError:調用o2843.count時發生一個錯誤。:org.apache.spark。SparkException:工作階段失敗而終止:任務17階段868.0失敗了4次,最近的失敗:在舞台上失去了任務17.3 868.0 (TID 3065)(10.249.38.86執行人6):java.util。NoSuchElementExceptionat org.apache.spark.sql.vectorized.ColumnarBatch$1.next(ColumnarBatch.java:69) at org.apache.spark.sql.vectorized.ColumnarBatch$1.next(ColumnarBatch.java:58) at scala.collection.convert.Wrappers$JIteratorWrapper.next(Wrappers.scala:44) at org.apache.spark.sql.execution.arrow.ArrowConverters$$anon$4.next(ArrowConverters.scala:401) at org.apache.spark.sql.execution.arrow.ArrowConverters$$anon$4.next(ArrowConverters.scala:382) at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage9.processNext(Unknown Source) ...

導致

NoSuchElementException錯誤是一個問題的結果在Apache箭頭優化。Apache箭是一個內存中的柱狀數據格式用於火花JVM和Python之間有效地傳輸數據。

當箭頭啟用優化Py4J接口,有可能它可以調用iterator.next ()沒有檢查iterator.hasNext ()。這可能導致一個NoSuchElementException錯誤。

解決方案

spark.databricks.pyspark.emptyArrowBatchCheck真正的在集群的火花配置(AWS|Azure|GCP)。

spark.databricks.pyspark.emptyArrowBatchCheck = true

啟用spark.databricks.pyspark.emptyArrowBatchCheck避免了NoSuchElementException錯誤發生時,箭頭批大小為0。

或者,您可以禁用箭頭優化集群的設置以下屬性火花配置

spark.sql.execution.arrow.pyspark。啟用= false spark.sql.execution.arrow.enabled = false

禁用箭頭優化性能影響。

這篇文章有用嗎?