广播时,Spark 可能会失败并出现错误
org.apache.spark.sql.errors.QueryExecutionErrors#notEnoughMemoryToBuildAndBroadcastTableError
(Spark 3.2.1):
为什么BroadcastExchange需要更多的驱动内存?如果广播的作用是向所有worker发送数据,为什么驱动程序内存是瓶颈?
谢谢。
不幸的是,Spark 尚不支持执行器端广播连接(请参阅SPARK-17556)。目前,广播数据集的所有数据首先收集在驱动程序中,以构建内存中的哈希表,然后将其分发给工作人员。这可能会给驱动程序带来较高的内存压力。