許多教程提到RDD
的預分區將優化火花作業的數據混排。我很困惑的是,因爲我的理解,預分區也會導致洗牌,爲什麼在這裏提前洗牌會有利於某些操作?特別是它會自我激發,會爲一組轉換做優化。爲什麼預分區會因減少混洗而受益?
例如:
如果我想將兩個數據集的國家(ID,國家)和收入(ID,(收入,月,年)),這是什麼兩種操作之間的區別? (我用PySpark模式)
通過ID預分區
country = country.partitionBy(10).persist() income = income.partitionBy(10).persist() income.join(country)
直接加入無預分區:
income.join(country)
如果我只需要計算這個加入一次,在加入之前使用預分區仍然有用嗎?我認爲partitionBy
也需要洗牌吧?如果我加入後的進一步計算都是以使用國家爲關鍵(以前用於加入的關鍵字ID將無效並從RDD
中刪除),那麼我應該如何優化計算?