spark-RDD
RDD就是一個不可變的分散式物件集合。
建立
RDD: 1)讀取一個外部資料集(SparkContext.textFile());
2)在驅動器程式中對一個集合進行並行化。
RDD 操 作: 1)轉 化 操 作(transformation):
會由一個
RDD
生成一個新的
RDD。
2)行 動 操 作
(
action):會對 RDD 計算出一個結果,並把結果返回到驅動器程式中,或儲存到外部儲存系統(如 HDFS)中。
轉化操作:union() 、filter()
行動操作:count() 、take() 、collect()
filter:RDD過濾資料;
union:兩個RDD操作;
count:RDD計數;
take:獲取RDD少量資料;
collect:獲取RDD全部資料。
轉化操作和行動操作的區別:在於 Spark計算 RDD的方式不同,轉化操作返回的是 RDD,而行動操作返回的是其他的資料型別。
RDD 的
轉化操作都是
惰性求值的。意味著在被呼叫行動操作之前 Spark 不會開始計算。
Spark
程式 或 shell會話 工作方式:
(1) 從外部資料建立出輸入 RDD
。
(2) 使用諸如
fifi
lter()
這樣的轉化操作對
RDD
進行轉化,以定義新的
RDD
。
(3) 告訴
Spark
對需要被重用的中間結果
RDD
執行
persist()
操作。
(4) 使用行動操作(例如
count()
和
fifi
rst()
等)來觸發一次平行計算,
Spark 會對計算進行優化後再執行。
RDD.persist() 讓 Spark 把 RDD 資料快取,將內容儲存到記憶體中(以分割槽方式儲存到叢集中的各機器上),這樣在之後的行動操作中,就可以重用這些資料了。
譜系圖(lineage graph):記錄這些不同 RDD 之間的依賴關係(Spark在持久化的 RDD 丟失部分資料時,可以依靠譜系圖恢復所丟失的資料)。