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 相似,不過每一個輸入項能夠被映射為0個或多個輸出項(所以 func 應(yīng)該返回一個Seq(隊列) 而不是一個單項)。
mapPartitions(func) 與 map 相似,但是他是單獨運行在 RDD 的每一個分區(qū)(塊)上,所以假如 RDD 是類型 T 時,則 func 的類型必須為 Iterator<T> => Iterator<U> 。
mapPartitionsWithIndex(func) 與 mapPartitions 相似,但是會另外提供一個整數(shù)值代表分區(qū)的下標(index), 所以假如 RDD 是類型 T 時,func 的類型必須為 (Int, Iterator<T>) => Iterator<U>.
sample(withReplacement, fraction, seed) 第一參數(shù)是指明是否放回,第二個參數(shù)是抽取數(shù)量,第三個是隨機種子。
union(otherDataset) 返回一個包含了源數(shù)據(jù)集和參數(shù)的新數(shù)據(jù)集
intersection(otherDataset) 返回一個元數(shù)據(jù)集與參數(shù)的相交之后的新的 RDD(就是交集)。
distinct([numTasks]) 對數(shù)據(jù)集進行去重操作
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上進行了聚合了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 來進行聚合后生成的 (K,U) 對,聚合的方式是通過提供一個合并方法和一個中立的“零”值來完成的。允許被聚合的 value 的類型與輸入的 value 的類型不一樣,這樣可以禁止沒必要的分配。和 groupByKey相似,reduce task 的個數(shù)是使用第二個可選參數(shù)指定的。
sortByKey([ascending],[numTasks]) 在(K,V)類型上調(diào)用他以實現(xiàn)按 K 排序。返回排序后的鍵值對。使用第一參數(shù)(boolean)值來決定是否為升序。
join(otherDataset, [numTasks]) 通過該方法可以按照 K 來將源數(shù)據(jù)集合與另一數(shù)據(jù)集合進行 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ū)進行導(dǎo)流, RDD 元素就可以寫入到進程的 stdin(標準輸入) ,也可以按照字符串的形式將其來按行輸出的 stdout(標準輸入)
repatition(numPartitions) 通過重新修改 partition 的個數(shù)來對 RDD 中的數(shù)據(jù)重新進行洗牌,以平衡分區(qū)。他總是對網(wǎng)絡(luò)上的所有數(shù)據(jù)進行重洗。

Actions 動作

Action 用法
reduce(func) 使用一個 func 來聚合一個數(shù)據(jù)集,方法應(yīng)該為兩個參數(shù),一個返回值。這個方法必須能夠翻轉(zhuǎn)與連接,以至于能夠在并發(fā)運行時的計算是正確的。
collect() 以數(shù)組的形式返回在驅(qū)動器上的數(shù)據(jù)集的所有元素。當(dāng)一個過濾器或者其他操作返回了一個小的子集時,使用這個方法會變得非常高效。
first() 返回數(shù)據(jù)集行的第一個元素。
take(n) 以數(shù)組的形式返回數(shù)據(jù)集上的前 n 個元素。
takeSample(withReplacement, num, [seed]) 返回抽樣后的數(shù)據(jù)組成的數(shù)組,第一個參數(shù)是時候放回取樣,第二個就是取樣的個數(shù),第三個可選的參數(shù)是取樣種子。
takeOrdered(n, [ordering]) 返回 RDD 排序后的前 n 個元素。排序方式要么就使用原生的排序方式,要么使用自定義的比較器排序,使用第二個可選參數(shù)傳入。
saveAsTextFile(path) 將數(shù)據(jù)集中的元素寫成一個文本文件,或者多個文本問價,參數(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 中可用的的鍵值對必須實現(xiàn) Hadoop 的 Writable 接口。在 Scala 中,也有許多可用的能夠隱含的轉(zhuǎn)型為 Writable 的類型,例如 Int, Double, String。
savaAsObjectFile(path) --Java and Scala 使用 Java 簡單的序列化方式,將 RDD 中的元素進行序列化。 可以使用 SparkContext.objectFile() 方法來加載。
countByKey() 按照 數(shù)據(jù)集中的 Key 進行分組,計算各個 K 的對應(yīng)的個數(shù)。(K,V)返回 (K,Int)
foreach(func) 在數(shù)據(jù)集上的每個元素上運行 func 方法。上面提到了。

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

End!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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