Spark 4. RDD 操作二 常用的 Transformations 與 Actions 方法

RDD 操作二 常用的 Transformations 與 Actions 方法

原文地址: http://spark.apache.org/docs/latest/programming-guide.html#transformations
僅限交流使用澄惊,轉(zhuǎn)載請注明出處。如有錯誤,歡迎指出泥耀!

Henvealf/譯

Transformations 轉(zhuǎn)換

這里只有 Scala 的API,Java 與 Python 請看官方API弟疆。

Transformation 啥意思啊
map(func) 返回每個元素經(jīng)過 func 方法處理后,所生成的新元素所組成的分布式數(shù)據(jù)集合(RDD)敦腔。
filter(func) 返回一個通過了方法 func 篩選的元素所組成的數(shù)據(jù)集合前计;func 返回 true胞谭,即代表通過篩選。
flatMap(func) 與 map 相似男杈,不過每一個輸入項(xiàng)能夠被映射為0個或多個輸出項(xiàng)(所以 func 應(yīng)該返回一個Seq(隊(duì)列) 而不是一個單項(xiàng))丈屹。
mapPartitions(func) 與 map 相似,但是他是單獨(dú)運(yùn)行在 RDD 的每一個分區(qū)(塊)上伶棒,所以假如 RDD 是類型 T 時旺垒,則 func 的類型必須為 Iterator<T> => Iterator<U> 。
mapPartitionsWithIndex(func) 與 mapPartitions 相似肤无,但是會另外提供一個整數(shù)值代表分區(qū)的下標(biāo)(index), 所以假如 RDD 是類型 T 時先蒋,func 的類型必須為 (Int, Iterator<T>) => Iterator<U>.
sample(withReplacement, fraction, seed) 第一參數(shù)是指明是否放回,第二個參數(shù)是抽取數(shù)量宛渐,第三個是隨機(jī)種子竞漾。
union(otherDataset) 返回一個包含了源數(shù)據(jù)集和參數(shù)的新數(shù)據(jù)集
intersection(otherDataset) 返回一個元數(shù)據(jù)集與參數(shù)的相交之后的新的 RDD(就是交集)。
distinct([numTasks]) 對數(shù)據(jù)集進(jìn)行去重操作
groupByKey([numTasks]) 當(dāng)在一個(K,V)數(shù)據(jù)集上調(diào)用他窥翩,會返回一個 (K, Iterator<V>) 數(shù)據(jù)集业岁。 注意 :當(dāng)你分組他們是為了在每個Key上聚合他們(比如求和或者平均值),使用 reduceByKey 或者 aggregateByKey 將會收益到更高的性能寇蚊。注意 :輸出的并發(fā)水平依賴于父 RDD 分區(qū)的個數(shù)叨襟。你能通過可選的 numTasks 參數(shù)設(shè)置不同的 task 數(shù)目。
reduceByKey(func, [numTasks]) 當(dāng)在一個(K,V)數(shù)據(jù)集上調(diào)用他時幔荒,將會返回一個在不同的key上進(jìn)行了聚合了Value的新的 (K,V) 數(shù)據(jù)集糊闽,聚合的方式是使用 func 方法指定,且必須是 (V,V) => V 類型的爹梁。 與 groupByKey 很像右犹,reduce task 的個數(shù)是使用第二個可選參數(shù)指定的。
aggregateByKey(zeroValue)(seqOp, combOp, [NumTasks]) 當(dāng)在一個(K,V)類型的數(shù)據(jù)集上調(diào)用他時姚垃,他就會返回一個按照 key 來進(jìn)行聚合后生成的 (K,U) 對念链,聚合的方式是通過提供一個合并方法和一個中立的“零”值來完成的。允許被聚合的 value 的類型與輸入的 value 的類型不一樣积糯,這樣可以禁止沒必要的分配掂墓。和 groupByKey相似,reduce task 的個數(shù)是使用第二個可選參數(shù)指定的看成。
sortByKey([ascending],[numTasks]) 在(K君编,V)類型上調(diào)用他以實(shí)現(xiàn)按 K 排序。返回排序后的鍵值對川慌。使用第一參數(shù)(boolean)值來決定是否為升序吃嘿。
join(otherDataset, [numTasks]) 通過該方法可以按照 K 來將源數(shù)據(jù)集合與另一數(shù)據(jù)集合進(jìn)行 join 操作祠乃。(K, V) 和 (K, W) join結(jié)果就是 (K,(V,W))。outer join 就直接使用 leftOuterJoin兑燥,rightOuterJoin亮瓷,fullOuterJoin 。
cogroup(otherDataset,[numTasks]) 當(dāng)在 (K, V) 類型與 (K, W)類型調(diào)用該方法時降瞳,會返回一個元祖 (K, (Iterable<V>, Iterable<W>)) 嘱支。也可以使用 groupWith 來調(diào)用。
cartesian(otherDataset) 當(dāng)在 T 類型與 U類型 的數(shù)據(jù)集上調(diào)用他挣饥,就返回一個 (T,U) 類型的數(shù)據(jù)集(所有元素組成的鍵值對)斗塘。
pipe(command,[envVars]) 通過 shell 命令將 RDD 的每個分區(qū)進(jìn)行導(dǎo)流, RDD 元素就可以寫入到進(jìn)程的 stdin(標(biāo)準(zhǔn)輸入) 亮靴,也可以按照字符串的形式將其來按行輸出的 stdout(標(biāo)準(zhǔn)輸入)
repatition(numPartitions) 通過重新修改 partition 的個數(shù)來對 RDD 中的數(shù)據(jù)重新進(jìn)行洗牌,以平衡分區(qū)于置。他總是對網(wǎng)絡(luò)上的所有數(shù)據(jù)進(jìn)行重洗茧吊。

Actions 動作

Action 用法
reduce(func) 使用一個 func 來聚合一個數(shù)據(jù)集,方法應(yīng)該為兩個參數(shù)八毯,一個返回值搓侄。這個方法必須能夠翻轉(zhuǎn)與連接,以至于能夠在并發(fā)運(yùn)行時的計(jì)算是正確的话速。
collect() 以數(shù)組的形式返回在驅(qū)動器上的數(shù)據(jù)集的所有元素讶踪。當(dāng)一個過濾器或者其他操作返回了一個小的子集時,使用這個方法會變得非常高效泊交。
first() 返回?cái)?shù)據(jù)集行的第一個元素乳讥。
take(n) 以數(shù)組的形式返回?cái)?shù)據(jù)集上的前 n 個元素。
takeSample(withReplacement, num, [seed]) 返回抽樣后的數(shù)據(jù)組成的數(shù)組廓俭,第一個參數(shù)是時候放回取樣云石,第二個就是取樣的個數(shù),第三個可選的參數(shù)是取樣種子研乒。
takeOrdered(n, [ordering]) 返回 RDD 排序后的前 n 個元素汹忠。排序方式要么就使用原生的排序方式,要么使用自定義的比較器排序雹熬,使用第二個可選參數(shù)傳入宽菜。
saveAsTextFile(path) 將數(shù)據(jù)集中的元素寫成一個文本文件,或者多個文本問價(jià)竿报,參數(shù)就是文件路徑铅乡,可以寫在本地文件系統(tǒng),HDFS烈菌,或者其他 Hadoop 支持的文件系統(tǒng)中隆判。Spark 會在每一個元素上調(diào)用 toString 方法犬庇,轉(zhuǎn)成文本文件中的一行文本。
saveAsSequenceFile(path) --Java and Scala 就是將 RDD 中的元素寫成 Hadoop SequenceFile到本地文件系統(tǒng)侨嘀,HDFS臭挽,或者其他 Hadoop 支持的文件系統(tǒng)。 且 RDDs 中可用的的鍵值對必須實(shí)現(xiàn) Hadoop 的 Writable 接口咬腕。在 Scala 中欢峰,也有許多可用的能夠隱含的轉(zhuǎn)型為 Writable 的類型,例如 Int涨共, Double纽帖, String。
savaAsObjectFile(path) --Java and Scala 使用 Java 簡單的序列化方式举反,將 RDD 中的元素進(jìn)行序列化懊直。 可以使用 SparkContext.objectFile() 方法來加載。
countByKey() 按照 數(shù)據(jù)集中的 Key 進(jìn)行分組火鼻,計(jì)算各個 K 的對應(yīng)的個數(shù)室囊。(K,V)返回 (K,Int)
foreach(func) 在數(shù)據(jù)集上的每個元素上運(yùn)行 func 方法。上面提到了魁索。

Spark RDD API 也提供了一些 action 的異步版本融撞,比如 foreach 對應(yīng)的 foreachAsync 。

End4治怠尝偎!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鹏控,隨后出現(xiàn)的幾起案子致扯,更是在濱河造成了極大的恐慌,老刑警劉巖当辐,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件急前,死亡現(xiàn)場離奇詭異,居然都是意外死亡瀑构,警方通過查閱死者的電腦和手機(jī)裆针,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寺晌,“玉大人世吨,你說我怎么就攤上這事∩胝鳎” “怎么了耘婚?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陆赋。 經(jīng)常有香客問我沐祷,道長嚷闭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任赖临,我火速辦了婚禮胞锰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兢榨。我一直安慰自己嗅榕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布吵聪。 她就那樣靜靜地躺著凌那,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吟逝。 梳的紋絲不亂的頭發(fā)上帽蝶,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音块攒,去河邊找鬼励稳。 笑死,一個胖子當(dāng)著我的面吹牛局蚀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恕稠,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼琅绅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鹅巍?” 一聲冷哼從身側(cè)響起千扶,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骆捧,沒想到半個月后澎羞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敛苇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年妆绞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枫攀。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡括饶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出来涨,到底是詐尸還是另有隱情图焰,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布蹦掐,位于F島的核電站技羔,受9級特大地震影響僵闯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜藤滥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一鳖粟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧超陆,春花似錦牺弹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谨娜,卻和暖如春航攒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趴梢。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工漠畜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坞靶。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓憔狞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彰阴。 傳聞我的和親對象是個殘疾皇子瘾敢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容