Spark 從零到開發(三)初識RDD

2021-09-11 13:10:06 字數 1242 閱讀 1503

rdd(resilient distributed dataset)叫做彈性分布式資料集,是spark中最基本的資料抽象,它代表乙個不可變、可分割槽、裡面的元素可平行計算的集合。rdd具有資料流模型的特點:自動容錯、位置感知性排程和可伸縮性。rdd允許使用者在執行多個查詢時顯式地將工作集快取在記憶體中,後續的查詢能夠重用工作集,這極大地提公升了查詢速度。

(1)一組分片(partition),即資料集的基本組成單位。對於rdd來說,每個分片都會被乙個計算任務處理,並決定平行計算的粒度。使用者可以在建立rdd時指定rdd的分片個數,如果沒有指定,那麼就會採用預設值。預設值就是程式所分配到的cpu core的數目。

(2)乙個計算每個分割槽的函式。spark中rdd的計算是以分片為單位的,每個rdd都會實現compute函式以達到這個目的。compute函式會對迭代器進行復合,不需要儲存每次計算的結果。

(3)rdd之間的依賴關係。rdd的每次轉換都會生成乙個新的rdd,所以rdd之間就會形成類似於流水線一樣的前後依賴關係。在部分分割槽資料丟失時,spark可以通過這個依賴關係重新計算丟失的分割槽資料,而不是對rdd的所有分割槽進行重新計算。

(4)乙個partitioner,即rdd的分片函式。當前spark中實現了兩種型別的分片函式,乙個是基於雜湊的hashpartitioner,另外乙個是基於範圍的rangepartitioner。只有對於於key-value的rdd,才會有partitioner,非key-value的rdd的parititioner的值是none。partitioner函式不但決定了rdd本身的分片數量,也決定了parent rdd shuffle輸出時的分片數量。

(5)乙個列表,儲存訪問每個partition的優先位置(preferred location)。對於乙個hdfs檔案來說,這個列表儲存的就是每個partition所在的塊的位置。按照「移動資料不如移動計算」的理念,spark在進行任務排程的時候,會盡可能地將計算任務分配到其所要處理資料塊的儲存位置。

spark裡的計算都是操作rdd進行,那麼學習rdd的第乙個問題就是如何構建rdd,構建rdd從資料**角度分為兩類:第一類是從記憶體裡直接讀取資料,第二類就是從檔案系統裡讀取,當然這裡的檔案系統種類很多常見的就是hdfs以及本地檔案系統了。

具體請參考:

從零到一學習golang語言 初識go語言(一)

從本篇文章起,從零到一學習go語言。到底是go語言還是golang語言,其實官網已經表態過為go語言。官網的網域名稱使用是因為go.org已經被註冊過了,需要花幾千萬購買,但是沒這個必要。第二個原因使用golang是因為,在搜尋引擎中查詢相關go的資料時使用golang能更大限度匹配,如果僅僅是輸入...

python從入門到高階之三(初識字典)

字典是另一種可變容器模型,且可儲存任意型別物件。字典的每個鍵值 key value 對用冒號 分割,每個對之間用逗號 分割,整個字典包括在花括號 中 格式如下所示 info 值得注意的是,字典是無序的,不像列表那樣有下標,字典裡的value通過key來獲取 輸出整個字典 print info 修改字...

我的iOS自學之路 從零基礎到企業實戰開發

學習一門語言需要堅持的毅力,本篇分享一下我的ios自學之路,以及學習中總結的經驗!2014年12 學習c語言 2015 2月開始學習objective c 學習objective c需要xcode 整合開發工具,xcode是安裝在蘋果系統上的,蘋果系統 來呢?2015 5月學習uikit 2015 ...