1. 程式人生 > >Spark程式設計指南之三:RDD基本概念

Spark程式設計指南之三:RDD基本概念

RDD是什麼?

RDD(Resilient Distributed Dataset),彈性分散式資料集,是Spark的核心資料結構抽象。
它是彈性的,具有容錯能力,能夠重新計算失敗結點。
它是分散式的,資料分佈在多個結點上。
它是一個數據集,可以從外部載入資料,可以是文字檔案,JSON,資料庫等。

RDD有哪些特性?

記憶體計算、延遲計算、容錯性、不可變性、邏輯分割槽、持久化策略、資料本地性。

RDD是如何實現彈性的?

Hadoop的MapReduce框架不適合大量的迭代和互動操作。
Spark的RDD抽象實現了將計算過程分為多個stage,並維護了有向無環圖DAG,以支援延遲計算。彈性是指Spark計算的快速恢復能力:由於DAG的血統維護和節點容錯,當一個節點出錯後,可以通過DAG血統重新計算。並可以儲存中間結果,實現大量的迭代操作。

RDD的transformation和Action操作有什麼區別?

transformation操作兩端都是RDD,從一個RDD生成另一個RDD。比如map(),flatmap(),filter(),reduceByKey()。action操作的返回值是一個值。比如first(),take(),collect(),count()。由於延遲計算,直到出現action操作時,Spark才會真正開始計算。

什麼是窄依賴和寬依賴?

Transformation操作分為窄依賴和寬依賴。
窄依賴在一個分割槽內處理,可以在區內完成轉換,與其他worker不用互動。
寬依賴中,下一個RDD的來源是多個父RDD,也稱為shuffle transformation。
可以從操作後的RDD的來源數量來區分,若一個分割槽內的RDD來源於多個RDD的分割槽,則為寬依賴。窄依賴和寬依賴的區別是有無shuffle,也是劃分stage的依據。

參考資料

http://spark.apache.org/docs/latest/rdd-programming-guide.html