工作与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

禁用箭头优化性能影响。

这篇文章有用吗?