1.mapPartitions效率比map高
- Map(function)的function是針對RDD的所有元素進行操作,有多少個元素就會執行多少次
- MapPartition(function)的function是RDD的分區進行操作,有多少個分區就會執行多少次,獨立在每個分區上運行,所以mapPartitions效率比map高的多。
-
假設有N個元素,有M個分區,那么map的函數的將被調用N次,而mapPartitions被調用M次,一個函數一次處理所有分區。
2.mapPartitions function不能重復執行
- mapPartitions()每次處理一個分區的數據,這個分區的數據處理完后,原 RDD 中該分區的數據才能釋放,可能導致 OOM。
- mapPartitions 數據存在Iterator迭代器中,Iterator<T> => Iterator<U>,同java的Iterator一樣,只能遍歷使用一次。
- SparkSql默認會開啟mapPartition的優化
總結:當內存空間較大的時候建議使用mapPartitions()。