spark(一)spark中map與mapPartitions的區別

一、map與mapPartitions的區別

在 Spark 性能調優中,經常會被建議儘量用 mappartition 操作去替代 map 操作。但是也不一定是每種業務場景都是如此,我們先來說一下兩者的區別

  • map 操作:對 RDD 中的每個元素進行操作(可以理解爲遍歷),比如使用一個function則需要執行該 function n 次,其中 n 爲元素個數;執行 1 次 function 只處理 1 個元素(或者稱爲一條數據),比如 partition 中的元素較多,當前已經處理了 1000 個元素,在內存不足的情況下,Spark 可以通過GC等方法(比如將已處理掉的 1000 個元素從內存中回收)回收內存。因此,通常 map 操作不會導致OOM的異常;
  • mappartition 操作:對 RDD 中每個 partition 的 iterator 進行操作,比如使用一個 function 則每個 partition 只需要各執行該 function 1 次(一個partition中的所有元素被一次傳給該 function);執行 1 次 function 需要接收該 partition 中的所有元素,因此一旦元素很多而處理內存不足,就容易導致OOM的異常;
    一般而言,mappartition 的性能更高;初始化操作、數據庫訪問等操作適合使用

二、 mapPartiton的缺點:

對於一個partition有很多數據的話,一次函數處理可能會導致OOM。普通的map一般不會導致OOM。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章