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