鍵值對 RDD 是 Spark 中許多操作所需要的常見數(shù)據(jù)類型。鍵值對 RDD 通常用來進行聚合計算。
我們一般要先通過一些初始 ETL(抽取、轉(zhuǎn)化、裝載)操作來將數(shù)據(jù)轉(zhuǎn)化為鍵值對形式。
對于鍵值對RDD的操作一般為聚合統(tǒng)計操作。
轉(zhuǎn)換為鍵值對RDD
在 Python 中使用第一個單詞作為鍵創(chuàng)建出一個 pair RDD:
pairs = lines.map(lambda x: (x.split(" ")[0], x))
鍵值對RDD的操作
1. 鍵值對RDD的轉(zhuǎn)化操作
針對1個pair RDD的轉(zhuǎn)化操作
| 操作算子 | 含義 |
|---|---|
| reduceByKey(func) | 合并具有相同鍵的值 |
| groupByKey() | 對具有相同鍵的值進行分組 |
| combineByKey( createCombiner, mergeValue, mergeCombiners, partitioner) | 使用不同的返回類型合并具有 相同鍵的值 |
| mapValues(func) | 對 pair RDD 中的每個值應(yīng)用 一個函數(shù)而不改變鍵 |
| flatMapValues(func) | 對 pair RDD 中的每個值應(yīng)用 一個返回迭代器的函數(shù),然后 對返回的每個元素都生成一個 對應(yīng)原鍵的鍵值對記錄。通常 用于符號化 |
| keys() | 返回一個僅包含鍵的 RDD |
| values() | 返回一個僅包含值的 RDD |
| sortByKey() | 返回一個根據(jù)鍵排序的 RDD |
針對兩個pair RDD的轉(zhuǎn)化操作
| 操作算子 | 含義 |
|---|---|
| subtractByKey | 刪掉 RDD 中鍵與 other RDD 中的鍵相同的元素 |
| join | 對兩個 RDD 進行內(nèi)連接 |
| rightOuterJoin | 對兩個 RDD 進行連接操作,確保第一 個 RDD 的鍵必須存在(右外連接) |
| leftOuterJoin | 對兩個 RDD 進行連接操作,確保第二 個 RDD 的鍵必須存在(左外連接) |
| cogroup | 將兩個 RDD 中擁有相同鍵的數(shù)據(jù)分組 到一起 |
2. 鍵值對RDD的行動操作
| 操作算子 | 含義 |
|---|---|
| countByKey() | 對每個鍵對應(yīng)的元素分別計數(shù) |
| collectAsMap() | 將結(jié)果以映射表的形式返回,以便查詢 |
| lookup(key) | 返回給定鍵對應(yīng)的所有值 |