當啟用AQE斷斷續續的NullPointerException

當啟用自適應查詢執行(AQE)時,和集群規模下降,失去洗牌數據,你可以得到一個NullPointerException的錯誤。

寫的mathan.pillai

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

問題

你得到一個斷斷續續的NullPointerException誤差在保存您的數據。

Py4JJavaError:調用o2892.save時發生一個錯誤。:. lang。org.apache.spark.sql.execution.adaptive.OptimizeSkewedJoin NullPointerException。anonfun getMapSizesForReduceId美元1美元(OptimizeSkewedJoin.scala: 167) org.apache.spark.sql.execution.adaptive.OptimizeSkewedJoin。anonfun getMapSizesForReduceId美元$ 1 $改編(OptimizeSkewedJoin.scala: 167) scala.collection.TraversableLike。anonfun地圖1美元美元(TraversableLike.scala: 238) scala.collection.IndexedSeqOptimized.foreach (IndexedSeqOptimized.scala: 36) ....在sun.reflect.DelegatingMethodAccessorImpl.invoke sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 62) (DelegatingMethodAccessorImpl.java: 43) java.lang.reflect.Method.invoke (Method.java: 498) py4j.reflection.MethodInvoker.invoke (MethodInvoker.java: 244) py4j.reflection.ReflectionEngine.invoke (ReflectionEngine.java: 380) py4j.Gateway.invoke (Gateway.java: 295) py4j.commands.AbstractCommand.invokeMethod (AbstractCommand.java: 132) py4j.commands.CallCommand.execute (CallCommand.java: 79) py4j.GatewayConnection.run (GatewayConnection.java: 251) java.lang.Thread.run (Thread.java: 748)

導致

這個錯誤可能發生如果自適應查詢執行(AQE) (AWS|Azure和你加入數據啟用)。如果啟用了AQE,斜加入也啟用。

如果任何的洗牌數據失敗由於集群事件時,它會生成一個按比例縮小NullPointerException錯誤。

解決方案

spark.sql.adaptive.skewJoin.enabled在你的火花配置(AWS|Azure)。