好吧,上面给出的堆栈跟踪不足以理解根本原因,但正如您所提到的,您正在使用联接,很可能是因为这个原因而发生的。我在加入时遇到了同样的问题,如果你挖掘堆栈跟踪,你会看到类似的东西 -
+- *HashAggregate(keys=[], functions=[partial_count(1)], output=[count#73300L])
+- *Project
+- *BroadcastHashJoin
...
Caused by: java.util.concurrent.TimeoutException: Futures timed out after [300 seconds]
这给出了失败原因的提示,Spark 尝试使用“广播哈希连接”进行连接,该连接具有超时和广播大小阈值,其中任何一个都会导致上述错误。要根据潜在错误修复此问题 -
增加“spark.sql.broadcastTimeout”,默认为 300 秒 -
spark = SparkSession
.builder
.appName("AppName")
.config("spark.sql.broadcastTimeout", "1800")
.getOrCreate()
或者增加广播阈值,默认为10 MB -
spark = SparkSession
.builder
.appName("AppName")
.config("spark.sql.autoBroadcastJoinThreshold", "20485760 ")
.getOrCreate()
或者通过将值设置为 -1 来禁用广播连接
spark = SparkSession
.builder
.appName("AppName")
.config("spark.sql.autoBroadcastJoinThreshold", "-1")
.getOrCreate()
更多详情可在这找到 -https://spark.apache.org/docs/latest/sql-performance-tuning.html