value類型的算子
處理數據類型為value型的算子(也就是這個算子只處理數據類型為value的數據),可以根據rdd的輸入分區與輸出分區的關系分為以下幾個類型

map型:對rdd的每個數據項,通過用戶自定義的函數映射轉換成一個新的rdd

上面4個方框表示4個rdd分區,當第一個方框中的rdd經過用戶自定義的map函數從v1映射為v,1.這種操作只有等到action算子觸發后,這個函數才會和其他的函數在一個stage中對數據進行運算
flagMap型:將原來的rdd通過用戶自定義的函數,轉化為一個新的rdd,然后再將每個新生成rdd中集合的每個元素合並成一個集合

外部的大方框可以看做是一個rdd的分區,里面的小方框看做是rdd中的集合,小方框中的集合作為rdd的一個數據項,通過用戶自定義的函數進行拆散,然后在對每個集合中的元素合並成一個集合
mapPartition型:通過這個函數可以每個分區的迭代器,這個迭代器可以可以對分區中的每個集合進行操作

上圖中的每一個方框代表一個rdd分區,這個分區通過用戶自定義的函數對每個分區中的數據項進行過濾,將過濾后的數據轉換為一個新的rdd
glom:是將rdd中的數據項轉換為一個數組

(2)
輸入分區與輸出分區為多對一型

union型:在使用union函數的時候要保證要合並的兩個rdd數據類型保證一致,並且返回rdd的數據類型和被合並的rdd類型一致,在union的時候數據數據是不去重的,所有的元素都會保留,如果想去重可以使用
distinct()函數

cartesian型:就是對兩個rdd對笛卡爾積操作

(3)
輸入分區與輸出分區為多對多型

groupby型:將元素通過函數生成對應的key,然后再對key進行分組(將相同的key分為一組),groupbykey(key)對key進行分組,其中key就決定了分區的個數和分區的函數,和並行化的個數
(4)
輸出分區為輸入分區的子集型

filter型:filter的功能是對rdd中的元素進行過濾,每個元素都應用於用戶自定義的函數,返回值為true得以保留,false則會過濾掉
distinct型:對rdd中相同的元素進行去重

subtract型:subtract是對rdd進行減操作,比如過濾rdd1和rdd2 中有交集的元素

sample型:sample會對rdd的所有元素進行采樣,獲取元素的子集。用戶可以設置是否有放回的抽樣,百分比,隨機種子,從而決定采樣的方式

上圖每一個方框是一個rdd分區,對rdd元素進行50%的采樣。

(5)
還有一種輸入分區與輸出分區一對一型:cache型,cache分區對rdd的分區進行緩存

cache型:cache就是將磁盤上的數據加載到內存里,相當於presiste(momory_only)函數功能

presiste型:presiste會將數據緩存操作,至於緩存到哪里由storageLevel的枚舉值來確定:
storageLevel:MEMONRY(內存),DIS(磁盤),SER(該數據是否要序列化存儲)
persist(newLevel:StorageLevel) //可你緩存的模式
