spark RDD程式設計

2021-10-25 03:56:42 字數 3199 閱讀 9538

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 丟失部分資料時,可以依靠譜系圖恢復所丟失的資料)。

偽集合操作:rdd 本身不是嚴格意義上的集合,但它也支援許多數學上的集合操作,比如合併和相交操作。

rdd.distinct() :  轉化操作(去重),生成乙個只包含不同元素的新rdd。

rdd1.

union(rdd2

):轉化操作(類似

並集),

返回乙個包含兩個 rdd

中所有元素的

rdd。

rdd1.intersection(rdd2) :

轉化操作(交集),

只返回兩個 rdd

中都有的元素(shufflfle)。

rdd1.subtract(rdd2): 

轉化操作(差集),

返回乙個由只存在於第乙個

rdd

中而不存在於第二個

rdd

中的所有元素組成的

rdd。

rdd1.

cartesian(rdd2) : 

轉化操作(

笛卡兒積

),返回所有可能的

(a, b)

對,其中

a 是源

rdd

中的元素,而

b 則來自另乙個

rdd。

注:distinct() 操作的開銷很大,它需要將所有資料通過網路進行混洗(

shuf

flfl

e),以確保每個元素都只有乙份。

對乙個資料為

的rdd

進行基本的

rdd轉化操作。    

對資料分別為和的

rdd進行針對兩個

rdd的轉化操作。

reduce():接收乙個函式作為引數,這個函式要操作兩個

rdd

的元素型別的資料並返回乙個同樣型別的新元素。

和 reduce()

類似,接收乙個與

reduce() 接收的函式簽名相同的函式,再加上乙個 「初始值」來作為每個分割槽第一次呼叫時的結果。

注:fold() 和 reduce() 都要求函式的返回值型別需要和我們所操作的 rdd 中的元素型別相同。

aggregate()

:把返回值型別必須與所操作的

rdd 型別相同的限制中解放出來。

對乙個資料為

的rdd

進行基本的

rdd行動操作。

rdd函式:mean() 和

variance()

只能用在數值

rdd 上, 而

join()

只能用在鍵值對

rdd 上。

persist() :把資料以序列化的形式快取在

jvm 的堆空間中。

:可以手動把持久化的

rdd 從快取中移除。

Spark RDD 程式設計例項

spark 最核心的概念就是rdd 彈性分布式資料集。rdd 是spark 運算元據的一種抽象,本質是分布式資料集合。這種集合被分為多個分割槽,這些分割槽執行在集群的不同節點上。我們在spark的shell 上執行的命令,會在每個分割槽上執行,最後將執行結果彙總起來就得到我們需要的結果。根據是否需要...

Spark RDD程式設計基礎

從檔案建立rdd lines sc.textfile 篩選出含某個單詞的行 lines.filter lambda 引數 條件表示式 生成單詞的列表 從列表建立rdd words sc.parallelize 篩選出長度大於10 的單詞 words.filter 從檔案建立rdd lines sc....

Spark RDD程式設計(2) 雙Value型別互動

所謂雙value,就是兩個資料集rdd之間進行操作。1 union otherdataset 對源rdd和引數 rdd合併後返回乙個新的 rdd,不會去重 val listrdd1 rdd int sc.makerdd 1 to 5 val listrdd2 rdd int sc.makerdd 5...