織夢cms收費seo優(yōu)化網(wǎng)站的注意事項
文章目錄
- 1、mapValues算子
- 功能
- 語法
- 舉例
- 2、mapPartitions算子
- 功能
- 語法
- 舉例
1、mapValues算子
功能
針對二元組KV類型的RDD
,對RDD中每個元素的Value進行map處理
,結果放入一個新的RDD中
語法
def mapValues(self: RDD[Tuple[K,V]], f: (V) -> U) -> RDD[Tuple[K,U]]
舉例
如何構造sc對象并創(chuàng)建RDD 參考文章:
【Spark中創(chuàng)建RDD的兩種方式】Spark中如何獲取sc對象、以及創(chuàng)建RDD的兩種方式
rdd_kv = sc.parallelize([('laoda',11),('laoer',22),('laosan',33),('laosi',44)], numSlices=2)
# 拿到年齡,并加一
rsRdd = rdd_kv.mapValues(lambda age: age + 1)
rsRdd.foreach(lambda x:print(x))
2、mapPartitions算子
功能
對RDD每個分區(qū)的數(shù)據(jù)進行操作,將每個分區(qū)的數(shù)據(jù)進行map轉換
,將轉換的結果放入新的RDD中
與 map 的區(qū)別:每個分區(qū)會調(diào)用一次
(一個分區(qū)一個分區(qū)的數(shù)據(jù)進行處理,而map是一條一條數(shù)據(jù)進行處理)
,將這個分區(qū)的數(shù)據(jù)放入內(nèi)存,性能比map更好,優(yōu)化型算子,注意更容易出現(xiàn)內(nèi)存溢出
語法
def mapPartitions(self: RDD[T], f: Iterable[T] -> Iterable[U] ) -> RDD[U]
- 優(yōu)點:性能快、節(jié)省外部連接資源
- 缺點:如果單個分區(qū)的數(shù)據(jù)量較大,容易出現(xiàn)內(nèi)存溢出
- 場景:
- 數(shù)據(jù)量不是特別大,需要提高性能【將整個分區(qū)的數(shù)據(jù)放入內(nèi)存】
- 需要構建外部資源時【基于每個分區(qū)構建一份資源】
舉例
# 使用mapPartitions:對每個分區(qū)進行處理
def map_partition(part):rs = [i * 2 for i in part]return rs# 每個分區(qū)會調(diào)用一次:將這個分區(qū)的數(shù)據(jù)放入內(nèi)存,性能比map更好,優(yōu)化型算子,注意更容易出現(xiàn)內(nèi)存溢出
map_part_rdd = input_rdd.mapPartitions(lambda part: map_partition(part))