RDD:彈性分布式資料集
五大特性:
1.A list of partitions (分區)
RDD是一個由多個partition(分區)組成的的list;将資料加載為RDD時,一般會遵循資料的本地性(一般一個hdfs裡的block會加載為一個partition)。
2.A function for computing each split (函數作用于每個分區)
RDD的每個partition上面都會有function,也就是函數應用,其作用是實作RDD之間partition的轉換。
比如說rdd1.map(_*10),把RDD裡面的每一個元素取出來乘以10,每個分區都應用這個map的函數。
3.A list of dependencies on other RDDs (記錄依賴以便恢複)
RDD會記錄它的依賴 ,為了容錯(重算,cache,checkpoint),也就是說在記憶體中的RDD操作時出錯或丢失會進行重算。
例如,rdd1.map(_*10).flatMap(..).map(..).reduceByKey(...)
可以看到有很多個階段,這些階段叫做stage,RDDstage之間會有依賴關系,後面根據前面的依賴關系來建構,如果前面的資料丢了,它會記住前面的依賴,從前面進行重新恢複。每一個算子都會産生新的RDD.textFile 與flatMap會産生兩個RDD.
4.Optionally,a Partitioner for Key-value RDDs (針對key-value的分區器)
可選,決定資料到哪個分區裡面,這個RDD是key-value 的時候才能有
5.Optionally, a list of preferred locations to compute each split on (采用最優位置進行運算)
選擇最優的位置去計算,也就是資料的本地性。資料在哪台機器上,任務就啟在哪個機器上,資料在本地上,不用走網絡。不過資料進行最後彙總的時候就要走網絡。(hdfs file的block塊)
常見的運算,不全
轉換:
1. map、flatMap、mapValues
都跟着需要執行的函數
map:執行map裡的函數,應用到每個RDD元素上,轉換成新的RDD,但可能是分層的
flatMap:基本與map相同,但傳回的是扁平化的資料(不分層),詳見wordcount執行個體
mapValues:針對key-value型RDD,key不計算,對value進行計算
2. 拼接:union、join、leftOuterJoin、rightOuterJoin
union:拼接
join:針對key-value型RDD,對相同的key進行拼接,不相同的都不要
leftOuterJoin:針對左邊RDD的key來拼接,如果左邊有右邊沒有就補全None
rightOuterJoin:針對右邊RDD的key來拼接
intersection():與拼接這種類似求并集的操作對應,intersection是找出相同元素(交集)
3. 一些真對字典RDD的ByKey操作
sortByKey排序、subtractByKey去重
4. 其他
parallelize轉換、filter過濾、distinct去重、randomSplit分割
動作:
reduce:執行reduce裡的函數來整合所有RDD資料
reduceByKey:類似reduce,針對key-value型RDD
collect():以數組的形式傳回資料集的所有元素
first():檢視首行資料
take(5):檢視前5行資料
count():計數
countByKey():類似count,針對key-value型RDD
status:統計,包括count、mean、stdev(标準差)、max、min
collectAsMap:轉化成字典
lookup:根據key檢視value
saveAsTextFile(路徑):儲存為檔案,可分為本地檔案和hdfs檔案
持久化:
intRDD = sc.parallelize([3,2,2,1,5]) # 建立RDD
intRDD.persist() # 持久化
intRDD.is_cached # 檢視是否儲存到緩存(cached)
intRDD.unpersist() # 取消持久化
intRDD.persist(StorageLevel.MEMORY_AND_DISK) # 設定持久化的存儲等級
存儲等級分為:
MEMORY_ONLY 僅記憶體,預設選項
MEMORY_AND_DISK 記憶體和硬碟
DISK_ONLY 硬碟
MEMORY_ONLY,2 備份,數字表示複制到幾個節點
(MEMORY_ONLY_SER) 類似MEMORY_ONLY,更多的使用cpu資源,更少的占用記憶體
(MEMORY_AND_DISK_SER) 類似上述