Spark調(diào)優(yōu) | 不可避免的 Join 優(yōu)化

SparkSQL總體流程介紹

Join基本要素

inner join
left outer join
right outer join
full outer join
left semi join
left anti join
Join基本實(shí)現(xiàn)流程

sort merge join實(shí)現(xiàn)

broadcast join實(shí)現(xiàn)

hash join實(shí)現(xiàn)

buildIter總體估計大小超過spark.sql.autoBroadcastJoinThreshold設(shè)定的值,即不滿足broadcast join條件;
開啟嘗試使用hash join的開關(guān),spark.sql.join.preferSortMergeJoin=false;
每個分區(qū)的平均大小不超過spark.sql.autoBroadcastJoinThreshold設(shè)定的值,即shuffle read階段每個分區(qū)來自buildIter的記錄要能放到內(nèi)存中;
streamIter的大小是buildIter三倍以上;
inner join

left outer join

right outer join

full outer join

keyA<keyB,則說明右表中沒有與左表rowA對應(yīng)的記錄,那么joinrowA與nullRow,緊接著,rowA更新到左表的下一條記錄;如果keyA>keyB,則說明左表中沒有與右表rowB對應(yīng)的記錄,那么joinnullRow與rowB,緊接著,rowB更新到右表的下一條記錄。如此循環(huán)遍歷直到左表和右表的記錄全部處理完。left semi join

left anti join

總結(jié)
評論
圖片
表情
