問題
你得到間歇工作的失敗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
禁用箭頭優化性能影響。