我加入了兩個RDD rddA
和rddB
。鋤頭Spark是否計劃加入?
rddA
有100個分區,rddB
有500個分區。
我想了解join
操作的機制。默認情況下,無論連接的順序如何,我都會得到相同的分區結構;即rddA.join(rddB
)和rddB.join(rddA)
產生相同數量的分區,並且通過觀察它使用較小的分區大小,100.我知道我可以通過使用rddA.join(rddB,500)
來增加分區大小,但是我更關心在引擎蓋下發生了什麼以及爲什麼選擇較小的尺寸。從觀察結果來看,即使我重新劃分小型rdd
,它的分區仍然會被使用; Spark是否對密鑰大小做過任何啓發式分析?
我的另一個問題是我得到的偏斜程度。我的小分區最終以3,314個條目結束,而最大分區總數達到599,911,729個(鍵),總數爲1,139,207個。兩個RDD都使用默認分區程序,那麼數據混洗是如何決定的? 我依稀記得,如果一個rdd
有一個分區程序集,那麼它將被使用的分區程序。是這樣嗎?這是「推薦」嗎?
最後,請注意,我的兩個rdd
s都比較大(〜90GB),因此廣播連接無濟於事。相反,任何對join
操作提供一些見解的方式都可能是要走的路。
PS。關於機制左右連接的任何細節都將是額外的好處:)