問題
您正在嚐試連接兩個大型表,從第一個表投影選定的列,從第二個表投影所有列。
盡管總大小超過了所設置的限製spark.sql.autoBroadcastJoinThreshold,BroadcastHashJoin, Apache Spark返回一個OutOfMemorySparkException錯誤。
org.apache.spark.sql. execute . outofmemorysparkexception: Size of broadcast table far exceeds estimated and exceeds limit of spark.driver.maxResultSize=1073741824。您可以使用set spark.sql.autoBroadcastJoinThreshold=-1來禁用此查詢的廣播
導致
這是由於Spark的大小估計器的限製。
如果其中一個數據幀的估計大小小於autoBroadcastJoinThreshold, Spark可以使用BroadcastHashJoin執行連接。如果可用節點沒有足夠的資源來容納廣播DataFrame,則由於內存不足錯誤,作業將失敗。
解決方案
有三種不同的方法可以緩解這個問題。