Spark學習筆記 鍵值對操作

2021-09-07 10:22:42 字數 3781 閱讀 4536

鍵值對 rdd是 spark 中許多操作所需要的常見資料型別

鍵值對 rdd 通常用來進行聚合計算。我們一般要先通過一些初始etl(抽取、轉化、裝載)操作來將資料轉化為鍵值對形式。

spark 為包含鍵值對型別的 rdd 提供了一些專有的操作。

1.建立pair rdd

val input = sc.parallelize(list(1, 2, 3, 4))

val pairs = input.map(x => (x+1, x))

for (pair

//輸出

(2,1)

(3,2)

(4,3)

(5,4)

2.pair rdd的轉化操作pair rdd 可以使用所有標準 rdd 上的可用的轉化操作。

pair rdd也支援rdd所支援的函式

pairs.filter
3.聚合操作類似fold() 、 combine() 、 reduce() 等行動操作,這些操作返回 rdd,因此它們是轉化操作而不是行動操作。

reducebykey()函式,接收乙個函式,並使用這個函式對值進行合併

val wordcount = textfile.flatmap(line => line.split(" ")).map(word => (word, 1)).reducebykey((a, b) => a + b)  #切分成單詞,轉換成鍵值對並計數
或者

input.flatmap(x => x.split(" ")).countbyvalue()
foldbykey()函式,也是接收乙個函式,並使用這個函式對值進行合併,提供初始值

countbyvalue()函式

val textfile = sc.textfile(inputfile)

val result1 = textfile.flatmap(x => x.split(" ")).countbyvalue()

println(result1)

輸出:map(cc -> 3, aa -> 6, bb -> 3, ee -> 3, ff -> 2, hh -> 1, dd -> 1, gg -> 1)

combinebykey()函式,使用 combinebykey() 求每個鍵對應的平均值

val data = seq(("a", 3), ("b", 4), ("a", 1))

val input2 = sc.parallelize(data)

//使用 combinebykey() 求每個鍵對應的平均值

val result2 = input2.combinebykey(

(v) => (v, 1),

(acc: (int, int), v) => (acc._1 + v, acc._2 + 1),

(acc1: (int, int), acc2: (int, int)) => (acc1._1 + acc2._1, acc1._2 + acc2._2)

).map

result2.collectasmap().map(println(_))

//輸出

(b,4.0)

(a,2.0)

4.資料分組groupbykey()函式,將資料根據鍵進行分組

val data = seq(("a", 3), ("b", 4), ("a", 1))

val input2 = sc.parallelize(data)

val result3 = input2.groupbykey()

for (result

println(result)

//輸出:

(a,compactbuffer(3, 1))

(b,compactbuffer(4))

5.連線join操作符

val input = sc.parallelize(list(1, 2, 3, 4))

val pairs1 = input.map(x => (x+1, x))

//輸出(2,1),(3,2),(4,3),(5,4)

val pairs2 = input.map(x => (x+1, 1))

//輸出(2,1),(3,1),(4,1),(5,1)

for(pair

//輸出(4,(3,1)),(3,(2,1)),(5,(4,1)),(2,(1,1))

有時,我們不希望結果中的鍵必須在兩個 rdd 中都存在,join的部分可以不存在leftouterjoin(other) 和 rightouterjoin(other)都會根據鍵連線兩個 rdd,但是允許結果中存在其中的乙個 pair rdd 所 缺失的鍵。

leftouterjoin(other)結果

(4,(3,some(1)))

(3,(2,some(1)))

(5,(4,some(1)))

(2,(1,some(1)))

rightouterjoin(other)結果

(4,(some(3),1))

(3,(some(2),1))

(5,(some(4),1))

(2,(some(1),1))

6.資料排序在 scala 中以字串順序對整數進行自定義排序

val input = sc.parallelize(list(1, 2, 3, 4))

val pairs1 = input.map(x => (x + 1, x))

implicit val sortintegersbystring = new ordering[int]

for(pair

println(pair)

//輸出

Spark學習筆記 (3 鍵值對操作 )

spark學習筆記3 鍵值對操作 鍵值對rdd通常用來進行聚合計算,spark為包含鍵值對型別的rdd提供了一些專有的操作spark中建立pair rdd的方法 1 儲存鍵值對的資料格式會在讀取時直接返回由其鍵值對資料組成的pair rdd 2 還可以使用map 函式將乙個普通的rdd轉為pair ...

spark鍵值對操作 一

鍵值對rdd也叫做pair rdd 把乙個普通 rdd轉換為pair rdd的時候使用map 函式來實現 使用第乙個單詞作為乙個鍵,建立乙個pair rdd pairs lines.map lambda x x.split 0 x reducebykey func 合併具有相同鍵的值 rdd.red...

Spark學習之鍵值對(pair RDD)操作

1 讀取本身就是鍵值對的資料 2 乙個普通的rdd通過map 轉為pair rdd,傳遞的函式需要返回鍵值對。python中使用第乙個單詞作為鍵建立出乙個pair rddpairs lines.amp lambda x x.split 0 x scala中使用第乙個單詞作為鍵建立出乙個pair rd...