SparkRDD操作經驗

2021-09-25 09:37:42 字數 1557 閱讀 3720

可以指代集合中的每乙個元素

// 篩選出可以被2整除的數

a.filter

(_%2==0

).map(

2*_)

注:在reducebykey中指代的是鍵值對中的值

參考:將某些經過了複雜計算得到的rdd存入快取中,避免下次呼叫時重複計算

// 將userinfomation這個rdd儲存到快取中

userinfomation.

cache

()

sortby可以很方便地定義按照那個元素排序

// 按照集合x中的某個元素排序

sortby

(x=>x._2._1,

false

)

sortbykey是按照鍵排序,雖然可以重寫排序方法但有點麻煩

// false是逆序

sortbykey

(false

)

陣列:

val arr =

array(1

,2,3

,4,5

,6)print(x

(0))

元組:

val tuple =

("hadoop"

,3.1415,45

,'char'

)print

(x._1)

// collect()返回的是array[t]型別  

// 下面整體返回的是hashset[string]型別

hashset()

++ targetqqusers.

map(_._1)

.collect

()

如果我們要在分布式計算裡面分發大物件,例如:字典,集合,黑白名單等,這個都會由driver端進行分發,一般來講,如果這個變數不是

廣播變數,那麼每個task就會分發乙份,這在task數目十分多的情況下driver的頻寬會成為系統的瓶頸,而且會大量消耗task伺服器上的資源,如果將這個變數宣告為廣播變數,那麼只是每個executor擁有乙份,這個executor啟動的task會共享這個變數,節省了通訊的成本和伺服器的資源。

廣播變數:實際上就是executor端用到了driver端的變數

如果在executor端你使用到了driver端的廣播變數,如果不使用廣播變數,在每個executor中有多少task就有多少變數副本。

注意:

不能將rdd廣播出去,rdd不存資料,可以將rdd的結果廣播出去,rdd.collect()

廣播變數只能在driver定義,在executor端不能修改廣播變數的值。

val a =

3val broadcast = sc.

broadcast

(a)

val c = broadcast.value
參考:

Spark RDD操作 Python 總結

map func 將原rdd中每個元素代入帶入func 1 23 rdd sc.parallelize 1,2,3 rdd.map lambda x x x collect 1,4,9 filter func 返回包含所有在func中結果為true 1 23 rdd sc.parallelize 1...

spark RDD基礎裝換操作 zip操作

將數字1 3組成的rdd,與字母a到c組成的rdd應用拉鍊 zip 操作,合併到乙個新的rdd中。scala val rdddata1 sc.parallelize 1 to 10,5 rdddata1 org.apache.spark.rdd.rdd int parallelcollectionr...

spark RDD程式設計

rdd就是乙個不可變的分布式物件集合。建立rdd 1 讀取乙個外部資料集 sparkcontext.textfile 2 在驅動器程式中對乙個集合進行並行化。rdd 操 作 1 轉 化 操 作 transformation 會由乙個 rdd 生成乙個新的 rdd。2 行 動 操 作 action 會...