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 。