RDD

RDD(Resilient Distributed Datasets),彈性分佈式數據集, 它是一種特殊集合,支持多種來源,有容錯機制,能夠被緩存,支持並行操做

spark編程模型的最主要抽象,第一個是RDD,第二個抽象是兩種共享變量,即支持並行計算的廣播變量和累加器

spark一切都是基於RDD的,RDD就是SPARK輸入的數據,把RDD理解成一個提供了許多操做接口的數據集合

RDD的操做類型分爲兩類,轉換(transformations),它將根據原有的RDD建立一個新的RDD;行動(actions),對RDD操做後把結果返回給driver。例如,map是一個轉換,它把數據集中的每一個元素通過一個方法處理後返回一個新的RDD;而reduce則是一個action,它收集RDD的全部數據後通過一些方法的處理,最後把結果返回給driver。

RDD的全部轉換操做都是lazy模式,即Spark不會馬上計算結果,而只是簡單的記住全部對數據集的轉換操做。這些轉換隻有遇到action操做的時候纔會開始計算

rdd包含五個特徵:

一個分片列表 partition list
一個計算函數compute,對每個split進行計算
對其餘rdd的依賴列表dependencies list.依賴又份 寬依賴和窄依賴。
partitioner for key-value RDDs.好比說 hash-partitioned rdd(這是可選的,並非全部的add都會有這個特徵)
對每個split計算的優先位置 Preferred Location。好比對一個hdfs文件進行計算時,能夠獲取優先計算的block locations

spark中的依賴關係主要體現爲兩種形式,窄依賴和寬依賴


RDD建立方式
1)從Hadoop文件系統(如HDFS、Hive、HBase)輸入建立。
2)從父RDD轉換獲得新RDD。
3)經過parallelize或makeRDD將單機數據建立爲分佈式RDD。
4)基於DB(Mysql)、NoSQL(HBase)、S3(SC3)、數據流建立。

每當一個job計算完成,其內部的全部RDD都會被清除,若是在下一個job中有用到其餘job中的RDD,會引起該RDD的再次計算,爲避免這種狀況,咱們可使用persist方法「持久化」一個RDD到內存中。sql

flatmap和map的區別

- Spark 中 map函數會對每一條輸入進行指定的操做,而後爲每一條輸入返回一個對象;

- 而flatMap函數則是兩個操做的集合——正是「先映射後扁平化」:

   操做1:同map函數同樣:對每一條輸入進行指定的操做,而後爲每一條輸入返回一個對象

   操做2:最後將全部對象合併爲一個對象
相關文章
相關標籤/搜索