Spark筆記三之RDD,運算元

2021-07-31 02:02:15 字數 2169 閱讀 5813

rdd核心概念

resilientdistributed dataset,彈性分布式資料集

1是唯讀的,分割槽記錄的集合物件

2分割槽(partition)是rdd的基本組成單位,其決定了平行計算的粒度。應用程式對rdd的轉換最終都是對其分割槽的轉換。

3使用者可以指定rdd的分割槽個數,如果不指定則預設程式分配到的cpu的core數

4每個分割槽被影射為乙個block,在呼叫hdfs底層時此block對應於hdfs的block(預設128m),spark通過blockmanager來管理block是乙個block管理器。

rdd的建立

例sc.textfile("hdfs://shb01:9000/word").flatmap(_.split("")).map((_,1)).reducebykey(_+_).collect

1檔案系統載入

通過textfile從檔案系統(hive,hdfs)載入資料建立乙個rdd

2rdd之間的轉換

例子中flatmap方法會產生rdd,之後在此rdd的基礎上每呼叫乙個方法就會建立乙個rdd,如果前面的父rdd如果不呼叫cache方法儲存則會消失。

3通過函式轉換

通過parallelize,makerdd方法也可以轉換生成rdd

val rdd1 =sc.makerdd(array(("a",1),("b",2),("c",3)))

val rdd1 =sc.parallelize(array(10,12,3,5,23)) numslices)

運算元在spark中函式又稱為運算元,運算元分為兩大類轉換運算元(transformations)和行動(action)運算元.

轉換型運算元:不會立即執行,不會觸發計算通常使rdd之間互相轉換,轉換型運算元又分為value型運算元和key-value型運算元

行動行運算元:立即執行觸發dag計算

value型運算元:

key-value型運算元:使用key-value型運算元必須引入sparkcontext._

importorg.apache.spark.sparkcontext._

運算元作用於rdd上,但由於rdd是由partition(分割槽)組成,所以運算元最終還是作用於分割槽上。

例:val file =sc.textfile("hdfs://shb01:9000/word")

val errors = file.filter(line =>line.contains("error")).count()

這是乙個過濾日誌的**,filter會在file基礎上再產生乙個rdd,會作用於每個分割槽上然後得到乙個新分割槽,這些新分割槽的總和組成乙個rdd。另外乙個分割槽對應乙個task。

spark-core_包下的rdd類可以檢視運算元的定義

package org.apache.spark.rdd

分割槽依賴關係

運算元操作父rdd中的分割槽並產生子rdd和分割槽,父rdd如果不儲存就會被丟棄,一旦子rdd計算失敗就需要重新計算父rdd。spark中通過rdd之間的依賴關係來確定需要重新計算那些父rdd。

依賴關係分為兩種窄依賴(narrowdependencies)和寬依賴(wide dependencies)

窄依賴:子rdd的乙個分割槽依賴乙個或多個父rdd中的乙個分割槽

寬依賴:子rdd中的乙個分割槽依賴父rdd的兩個或多個或全部分割槽

窄依賴:重新計算時代價小,只需要計算乙個partition在一台機器上就能完成

寬依賴:重新計算時代價大,可能需要計算多個partition,而partition對應的是集群中的block,而這些block很有可能會儲存在集群的多個節點上。

所以一般需要將寬依賴的rdd進行快取

判斷寬依賴:

1一般情況下value型的運算元產生的rdd是窄依賴,key-value型的運算元產生的rdd是寬依賴。

2通過呼叫dependencies來判斷是那種分割槽依賴關係

顯示onetoone是窄依賴,反之如果顯示shuffledrdd則是寬依賴

Spark學習進度 RDD運算元

需求 資料格式如下 在 spark 中,其實最終 job3 從邏輯上的計算過程是 job3 job1.map filter,整個過程是共享記憶體的,而不需要將中間結果存放在可靠的分布式檔案系統中 線性回歸 val points sc.textfile map persist val w random...

spark筆記(一)之RDD任務劃分

一.driver executer driver 建立spark上下文物件的應用程式稱之為driver,或者驅動器 只要建立spark上下文物件的類,可以稱之為driver類 功能 傳送任務給executor進行計算 總結 除executoru運算元計算功能之外的 都屬於driver executo...

Spark之RDD的屬性

1.一組分片 partition 即資料集的基本組成單位。對於rdd來說,每個分片都會被乙個計算任務處理,並決定平行計算的粒度。使用者可以在建立rdd時指定rdd的分片個數,如果沒有指定,那麼就會採用預設值。預設值就是程式所分配到的cpu core的數目。2.乙個計算每個分割槽的函式。spark中r...