问题
你得到间歇工作的失败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
禁用箭头优化性能影响。