map:
遍歷算子,可以遍歷RDD中每一個(gè)元素,遍歷的單位是每條記錄
mapPartitions
遍歷算子,可以改變RDD格式,會(huì)提高RDD并行度,遍歷單位是partition,也就是在遍歷之前它會(huì)將一個(gè)partition的數(shù)據(jù)加載到內(nèi)存中
那么問題來了用上面的兩個(gè)算子遍歷一個(gè)RDD誰的效率高?
mapPartitions算子效率高
mapPartitions算子占用內(nèi)存多,如果一個(gè)partition的計(jì)算結(jié)果非常非常大,那么可能造成OOM,怎么解決?
repartition算子來增加RDD的分區(qū)數(shù),那么每一個(gè)partition的計(jì)算結(jié)果就減少了很多。
mapPartitions應(yīng)用場(chǎng)景
一般在將一個(gè)RDD的計(jì)算結(jié)果寫入到數(shù)據(jù)庫(mysql oracle redis)中時(shí)會(huì)使用這個(gè)算子,這個(gè)算子適合將數(shù)據(jù)插入到數(shù)據(jù)庫