Spark RDD 鍵值對的操作(Scala版)

2021-09-03 02:24:38 字數 2486 閱讀 6301

鍵值對rdd是spark中許多操作所需要的常見資料型別。鍵值對rdd通常用來進行聚合運算,我們一般要先通過一些初始etl(抽取,轉化,裝載)操作來將資料轉化為鍵值對形式。

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

很多儲存鍵值對的資料格式會在讀取時直接返回其由鍵值對資料組成的pair rdd,當需要把乙個普通的rdd轉化為pair rdd時,可以呼叫map()來實現

使用第乙個單詞作為鍵來建立pair rdd

val pairs = line.map(x => (x.split(" ")(0),x))
//假設有乙個鍵值對集合

//reducebykey(func) 合併具有相同建的值

rdd.reducebykey((x,y) => x+y) //

//groupbykey() 對具有相同的鍵值進行分組

rdd.groupbykey() //

//mapvalues 對pair rdd 中的每個值應用乙個函式而不改變鍵

rdd.mapvalues(x => x+1) //

//flatmapvalues(func) 對pair rdd中的每個值應用乙個返回迭代器的函式,然後對返回的每個元素都生成乙個對應原鍵的鍵值對記錄,通常用於符號化。

rdd.flatmapvalues(x => (x to 5)) //

//keys 返回乙個僅包含鍵的rdd

rdd.keys //注意此處不需要使用括號

//values 返回乙個僅包含值得rdd

rdd.values //注意此處不需要使用括號

//sortbykey 返回乙個根據鍵進行排序的rdd

rdd.sortbykey() //

//假設有鍵值對集合(rdd =  ,others = 

//subtractbykey 刪掉rdd中鍵與other rdd中的鍵相同的元素

rdd.subtractbykey(others) //

//join 對兩個rdd進行內連線

rdd.join(others) //

//rightouterjoin 對兩個rdd進行連線操作,確保第乙個rdd的鍵必須存在(右外連線)

rdd.rightouterjoin(others) //

//leftouterjoin 對兩個rdd進行連線操作,確保第二個rdd的鍵必須存在(左外連線)

rdd.rightouterjoin(others) //

//cogroup 將兩個rdd中擁有相同的鍵的資料分組到一起

rdd.cogroup(others) //

pair rdd也還是rdd,所以pair rdd也支援rdd所支援的所有函式

例:篩選掉長度超過20個的字元的行

pairs.filter
聚合操作當資料集以鍵值對的形式組織的時候,聚合具有相同鍵的元素進行一些統計是很常見的操作。

例:在scala中使用reducebykey()和mapvalues()計算每個鍵值對對應的平均值。

rdd.mapvalues(x=>(x,1)).reducebykey((x,y) => (x._1 + y._1,x._2 + y._2))
求鍵值時的資料流如下圖所示:

例:用scala實現單詞計數

val input = sc.textfile("s3://...")

val words = input.flatmap(x => x.split(""))

val result = words.map(x => (x,1)).reducebykey((x,y) => x+y)

和轉化操作一樣,所有基礎rdd支援的傳統行動操作也都在pairrdd上可用,pair rdd提供了一些額外的行動操作,可以讓我們充分利用資料的鍵值對特性。

//假設有鍵值對集合

//countbykey 對每個鍵對應的元素分別計數

rdd.countbykey() //

//collectasmap 將結果以對映表的形式返回,以便查詢

rdd.collectasmap() //map

//lookup 返回給定鍵對應的所有值

rdd.lookup(3) //[4,6]

本文講述了rdd鍵值對的一些基本操作函式,後續會繼續更新多種高階操作。

memcached鍵值對操作

0 quit 退出memcache 1 set set key flags exptime bytes noreply value flags 可以包括鍵值對的整型引數,客戶機使用它儲存關於鍵值對的額外資訊 exptime 快取時間,單位是秒,0表示永遠 bytes 快取中儲存的位元組數 norep...

oracle的insert鍵值對操作

此 是深圳雁聯公司查詢報文時給資料庫字段賦值的 由於沒有 庫函式不能通過定義去找,這裡我就寫個漢語意思吧 include using namespace aps ifdef z use namespace in entity using namespace endif using namespace...

spark鍵值對操作 一

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