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的建立
在spark中建立rdd的建立方式可以分為三種 從集合中建立rdd 從外部儲存建立rdd 從其他rdd建立。從集合中建立rdd,spark主要提供了兩種函式 parallelize和makerdd 1 使用parallelize 從集合建立 2 使用makerdd 從集合建立 包括本地的檔案系統,還...
Spark學習之RDD的概念
rdd又叫彈性分布式資料集,是spark資料的基礎單元,spark程式設計是圍繞著在rdd上建立和執行操作來進行的。它們是跨集群進行分割槽的不可變集合 immutable collection 如果某個分割槽丟失,這些分割槽可以重建 重新計算 它們是使用資料流運算子 map,filter,group...
spark 的RDD分割槽
rdd的倆種建立方 1.從集合中建立rdd,spark主要提供了兩種函式 parallelize和makerdd 使用parallelize 從集合建立 scala val rdd sc.parallelize array 1,2,3,4,5,6,7,8 使用makerdd 從集合建立 scala ...