鍵值對 rdd是 spark 中許多操作所需要的常見資料型別
鍵值對 rdd 通常用來進行聚合計算。我們一般要先通過一些初始etl(抽取、轉化、裝載)操作來將資料轉化為鍵值對形式。
spark 為包含鍵值對型別的 rdd 提供了一些專有的操作。
1.建立pair rdd
val input = sc.parallelize(list(1, 2, 3, 4))2.pair rdd的轉化操作pair rdd 可以使用所有標準 rdd 上的可用的轉化操作。val pairs = input.map(x => (x+1, x))
for (pair
//輸出
(2,1)
(3,2)
(4,3)
(5,4)
pair rdd也支援rdd所支援的函式
pairs.filter3.聚合操作類似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)combinebykey()函式,使用 combinebykey() 求每個鍵對應的平均值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)
val data = seq(("a", 3), ("b", 4), ("a", 1))4.資料分組groupbykey()函式,將資料根據鍵進行分組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)
val data = seq(("a", 3), ("b", 4), ("a", 1))5.連線join操作符val input2 = sc.parallelize(data)
val result3 = input2.groupbykey()
for (result
println(result)
//輸出:
(a,compactbuffer(3, 1))
(b,compactbuffer(4))
val input = sc.parallelize(list(1, 2, 3, 4))有時,我們不希望結果中的鍵必須在兩個 rdd 中都存在,join的部分可以不存在leftouterjoin(other) 和 rightouterjoin(other)都會根據鍵連線兩個 rdd,但是允許結果中存在其中的乙個 pair rdd 所 缺失的鍵。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))
leftouterjoin(other)結果
(4,(3,some(1)))rightouterjoin(other)結果(3,(2,some(1)))
(5,(4,some(1)))
(2,(1,some(1)))
(4,(some(3),1))6.資料排序在 scala 中以字串順序對整數進行自定義排序(3,(some(2),1))
(5,(some(4),1))
(2,(some(1),1))
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...