主要是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 如果只需要在讀取輸入時在容器的中間位置插入元素...