問題
你正試圖加入兩個大表,將所選列從第一個表和第二個表的所有列。
盡管總大小超過設定的限製spark.sql.autoBroadcastJoinThreshold,BroadcastHashJoin使用和Apache返回一個火花OutOfMemorySparkException錯誤。
org.apache.spark.sql.execution。OutOfMemorySparkException: Size of broadcasted table far exceeds estimates and exceeds limit of spark.driver.maxResultSize=1073741824. You can disable broadcasts for this query using set spark.sql.autoBroadcastJoinThreshold=-1
導致
這是由於火花的規模估計量的限製。
如果估計的大小DataFrames小於之一autoBroadcastJoinThreshold,火花可能使用BroadcastHashJoin執行連接。如果沒有足夠的可用節點資源適應廣播DataFrame、你的工作失敗由於內存錯誤。
解決方案
有三種不同的方法來緩解這個問題。