如何高效使用Spark的mappartition

2021-08-22 19:09:51 字數 989 閱讀 7887

主要是map和foreach這類的是針對乙個元素呼叫一次我們的函式,也即是我們的函式引數是單個元素,假如函式內部存在資料庫鏈結、檔案等的建立及關閉,那麼會導致處理每個元素時建立一次鏈結或者控制代碼,導致效能底下,很多初學者犯過這種毛病。而foreachpartition是針對每個分割槽呼叫一次我們的函式,也即是我們函式傳入的引數是整個分割槽資料的迭代器,這樣避免了建立過多的臨時鏈結等,提公升了效能。

val a = sc.parallelize(1 to 20, 2)

defmapterfunc

(a : int) : int =

val mapresult = a.map(mapterfunc)

println(mapresult.collect().mkstring(","))

結果3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60

val a = sc.parallelize(1 to 20, 2)

defterfunc

(iter: iterator[int]) : iterator[int] =

res.iterator

}println(result.collect().mkstring(","))

結果30,27,24,21,18,15,12,9,6,3,60,57,54,51,48,45,42,39,36,33

class

customiterator

(iter: iterator[int])

extends

iterator[int]

def next : int=

} println(result.collect().mkstring(","))

結果:3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60

如何高效使用Spark的mappartition

主要是map和foreach這類的是針對乙個元素呼叫一次我們的函式,也即是我們的函式引數是單個元素,假如函式內部存在資料庫鏈結 檔案等的建立及關閉,那麼會導致處理每個元素時建立一次鏈結或者控制代碼,導致效能底下,很多初學者犯過這種毛病。而foreachpartition是針對每個分割槽呼叫一次我們的...

Map的高效遍歷

quote b 場景 b 偶爾生產環境的某台機器cpu使用率很高,經過定位發現是有乙個大的hashmap hashmap裡面存放了大量資料,比如1w條 做迴圈引起的。quote 中採用了如下的遍歷 for iterator ite map.keyset iterator ite.hasnext 通過...

如何高效的使用STL

一些容器選用法則 1 如果程式要求隨機訪問元素,則應使用vector或deque容器 2 如果程式必須在容器的中間位置插入或刪除元素,則應採用list容器 3 如果程式不是在容器的中間位置,而是在容器首部或尾部插入或刪除元素,則應採用deque容器 4 如果只需要在讀取輸入時在容器的中間位置插入元素...