91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spark RDD算子中Key-Value型Transformation算子的示例分析

發布時間:2021-12-10 11:53:10 來源:億速云 閱讀:168 作者:小新 欄目:云計算

這篇文章主要為大家展示了“spark RDD算子中Key-Value型Transformation算子的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“spark RDD算子中Key-Value型Transformation算子的示例分析”這篇文章吧。

Key-Value型Transformation算子

Transformation處理的數據為Key-Value形式的算子,大致可以分為3種類型:輸入分區與輸出分區一對一、聚集、連接操作。

1.輸入分區與輸出分區一對一

mapValues(f)

針對(Key, Value)型數據中的 Value進行Map操作,而不對Key進行處理。

圖3-19中的方框代表RDD分區。a=>a+2代表只對(V1,1)數據中的1進行加2操作,返回結果為3。

spark RDD算子中Key-Value型Transformation算子的示例分析

2.對單個RDD或兩個RDD聚集

(1)單個RDD聚集

1)combineByKey(createCombiner, mergeValue, mergeCombiners, numPartitions=None, partitionFunc=<function portable_hash at 0x7fa664f3cb90>)

說明:

createCombiner: V => C,在C不存在的情況下,如通過V創建seq C。

mergeValue: (C, V) => C,當C已經存在的情況下,需要merge,如把item V加到seq C中,或者疊加。

mergeCombiners: (C, C) => C,合并兩個C。

partitioner: Partitioner(分區器), Shuffle時需要通過Partitioner的分區策略進行分區。

mapSideCombine: Boolean = true,為了減小傳輸量,很多combine可以在map端先做。例如,疊加可以先在一個partition中把所有相同的Key的Value疊加,再shuffle。

serializerClass: String = null,傳輸需要序列化,用戶可以自定義序列化類。

例如,相當于將元素為(Int,Int)的RDD轉變為了(Int, Seq[Int])類型元素的RDD。

圖3-20中的方框代表RDD分區。通過combineByKey,將(V1, 2)、(V1, 1)數據合并為(V1, Seq(2, 1))。

spark RDD算子中Key-Value型Transformation算子的示例分析

2)reduceByKey(func, numPartitions=None, partitionFunc=<function portable_hash at 0x7fa664f3cb90>)

reduceByKey是更簡單的一種情況,只是兩個值合并成一個值,所以createCombiner很簡單,就是直接返回v,而mergeValue和mergeCombiners的邏輯相同,沒有區別。
圖3-21中的方框代表RDD分區。通過用戶自定義函數(A, B)=>(A + B),將相同Key的數據(V1, 2)、(V1, 1)的value相加,結果為(V1, 3)。

spark RDD算子中Key-Value型Transformation算子的示例分析

3)partitionBy(numPartitions, partitionFunc=<function portable_hash at 0x7fa664f3cb90>)

partitionBy函數對RDD進行分區操作。

如果原有RDD的分區器和現有分區器(partitioner)一致,則不重分區,如果不一致,則相當于根據分區器生成一個新的ShuffledRDD。

圖3-22中的方框代表RDD分區。通過新的分區策略將原來在不同分區的V1、V2數據都合并到了一個分區。

spark RDD算子中Key-Value型Transformation算子的示例分析

(2)對兩個RDD進行聚集

cogroup(other, numPartitions=None)

cogroup函數將兩個RDD進行協同劃分,對在兩個RDD中的Key-Value類型的元素,每個RDD相同Key的元素分別聚合為一個集合,并且返回兩個RDD中對應Key的元素集合的迭代器。其中,Key和Value,Value是兩個RDD下相同Key的兩個數據集合的迭代器所構成的元組。

圖3-23中的大方框代表RDD,大方框內的小方框代表RDD中的分區。將RDD1中的數據(U1, 1)、(U1, 2)和RDD2中的數據(U1, 2)合并為(U1, ((1, 2), (2)))。

spark RDD算子中Key-Value型Transformation算子的示例分析

3.連接

(1)join

join對兩個需要連接的RDD進行cogroup函數操作,cogroup原理請見上文。cogroup操作之后形成的新RDD,對每個key下的元素進行笛卡爾積操作,返回的結果再展平,對應Key下的所有元組形成一個集合,最后返回RDD[(K, (V, W))]

圖3-24是對兩個RDD的join操作示意圖。大方框代表RDD,小方框代表RDD中的分區。函數對擁有相同Key的元素(例如V1)為Key,以做連接后的數據結果為(V1,(1,1))和(V1,(1,2))。

spark RDD算子中Key-Value型Transformation算子的示例分析

(2)leftOutJoin和rightOutJoin

LeftOutJoin(左外連接)和RightOutJoin(右外連接)相當于在join的基礎上先判斷一側的RDD元素是否為空,如果為空,則填充為空。如果不為空,則將數據進行連接運算,并返回結果。

以上是“spark RDD算子中Key-Value型Transformation算子的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永寿县| 明星| 莫力| 嘉峪关市| 鲁山县| 肥乡县| 永兴县| 沈丘县| 比如县| 嘉善县| 古浪县| 阿拉善左旗| 郸城县| 芜湖市| 德保县| 正阳县| 封开县| 鄂托克前旗| 玉树县| 安吉县| 江山市| 慈利县| 揭东县| 九寨沟县| 兴和县| 句容市| 桐柏县| 五寨县| 保定市| 凉城县| 南充市| 山丹县| 武冈市| 始兴县| 阜城县| 达拉特旗| 尉犁县| 苍梧县| 临泉县| 哈巴河县| 天水市|