(一)spark算子 分為3大類


value類型的算子
處理數據類型為value型的算子(也就是這個算子只處理數據類型為value的數據),可以根據rdd的輸入分區與輸出分區的關系分為以下幾個類型
(1)輸入分區與輸出分區一對一型
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%的采樣。
 takeSample型:takeSample采樣不是通過相對的比例采樣,而是通過設定的個數進行采樣,采樣返回的結果也不是rdd,而是對采樣后的數據進行collect(),返回的結果集合是單擊的數組。

 
(5) 還有一種輸入分區與輸出分區一對一型:cache型,cache分區對rdd的分區進行緩存
 cache型:cache就是將磁盤上的數據加載到內存里,相當於presiste(momory_only)函數功能

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM