rdd的操作
rdd支援兩種操作:轉換和動作。
1)轉換,即從現有的資料集建立乙個新的資料集。
2)動作,即在資料集上進行計算後,返回乙個值給driver程式。
例如,map就是一種轉換,它將資料集每乙個元素都傳遞給函式,並返回乙個新的分布式資料集表示結果。另乙個方面,reduce是一種動作,通過一些函式將所有元素疊加起來,並將最終結果返回driver(還有乙個並行的reducebykey,能返回乙個分布式資料集)。
下圖描述了從外部資料來源建立rdd,經過多次轉換,通過乙個動作操作將結果寫回外部儲存系統的邏輯執行圖。整個過程的計算都是在worker中的executor中執行。
圖 1 rdd的建立、轉換和動作的邏輯計算圖
rdd的轉換
rdd中的所有轉換都是惰性的,也就是說,它們並不會直接計算結果。相反的,它們只是記住這些應用到基礎資料集(例如乙個檔案)上的轉換動作。只有當發生乙個要求返回結果給driver的動作時,這些轉換才會真正執行。這個設計讓spark更加有效率地執行。例如我們可以實現:通過map建立的乙個新資料集,並在reduce中使用,最終只返回reduce的結果給driver,而不是整個大的新資料集。圖2描述了rdd在進行groupbyrey時的內部rdd轉換的實現邏輯圖。圖3描述了reducebykey的實現邏輯圖。
圖2 rdd groupbykey的邏輯轉換圖
圖3 rdd reducebykey 的邏輯轉換圖
預設情況下,每乙個轉換過的rdd都會在它執行乙個動作時被重新計算。不過也可以使用persist(或者cache)方法,在記憶體中持久化乙個rdd。在這種情況下,spark將會在集群中儲存相關元素,下次查詢這個rdd時能更快訪問它。也支援在磁碟上持久化資料集,或在集群間複製資料集。
Spark RDD概念學習系列之如何建立RDD
不多說,直接上乾貨!方式一 從集合建立rdd 1 makerdd 2 parallelize 注意 makerdd可以指定每個分割槽perferredlocations引數,而parallelize則沒有。方式二 讀取外部儲存建立rdd spark與hadoop完全相容,所以對hadoop所支援的檔...
Beam概念學習系列之PTransform資料處理
不多說,直接上乾貨!ptransform資料處理 ptransform對pcollection進行並行處理,每次處理1條,例如filter過濾 groupby分組 combine統計 join關聯等等,還允許根據業務邏輯編寫pardo。apache beam借鑑了函式式程式設計的不可變性,ptran...
Storm概念學習系列之storm的功能和三大應用
不多說,直接上乾貨!storm的功能 下面介紹storm 的三大主要應用 1 流處理 stream processing storm 可用來實時處理新資料和更新資料庫,兼具容錯性和可擴充套件性,即 storm 可以用來處理源源不斷流進來的訊息,處理之後將結果寫入某個儲存中。2 持續計算 contin...