Spark的transformation和action算子簡介

transformation算子

map(func)

返回一個新的分佈式數據集,由每個原元素經過func函數處理後的新元素組成

filter(func)

返回一個新的數據集,由經過func函數處理後返回值爲true的原元素組成

flatMap(func)

類似於map,但是每一個輸入元素,會被映射爲0個或多個輸出元素,(因此,func函數的返回值是一個seq,而不是單一元素)

mapPartitions(func)

類似於map,對RDD的每個分區起作用,在類型爲T的RDD上運行時,func的函數類型必須是Iterator[T]=>Iterator[U]

sample(withReplacement,fraction,seed)

根據給定的隨機種子seed,隨機抽樣出數量爲fraction的數據

pipe(command,[envVars])

通過管道的方式對RDD的每個分區使用shell命令進行操作,返回對應的結果

union(otherDataSet)

返回一個新的數據集,由原數據集合參數聯合而成

intersection(otherDataset)

求兩個RDD的交集

distinct([numtasks])

返回一個包含源數據集中所有不重複元素的i新數據集

groupByKey([numtasks])

在一個由(K,v)對組成的數據集上調用,返回一個(K,Seq[V])對組成的數據集。默認情況下,輸出結果的並行度依賴於父RDD的分區數目,如果想要對key進行聚合的話,使用reduceByKey或者combineByKey會有更好的性能

reduceByKey(func,[numTasks])

在一個(K,V)對的數據集上使用,返回一個(K,V)對的數據集,key相同的值,都被使用指定的reduce函數聚合到一起,reduce任務的個數是可以通過第二個可選參數來配置的

sortByKey([ascending],[numTasks])

在類型爲(K,V)的數據集上調用,返回以K爲鍵進行排序的(K,V)對數據集,升序或者降序有boolean型的ascending參數決定

join(otherDataset,[numTasks])

在類型爲(K,V)和(K,W)類型的數據集上調用,返回一個(K,(V,W))對,每個key中的所有元素都在一起的數據集

cogroup(otherDataset,[numTasks])

在類型爲(K,V)和(K,W)類型的數據集上調用,返回一個數據集,組成元素爲(K,Iterable[V],Iterable[W]) tuples

cartesian(otherDataset)

笛卡爾積,但在數據集T和U上調用時,返回一個(T,U)對的數據集,所有元素交互進行笛卡爾積

coalesce(numPartitions)

對RDD中的分區減少指定的數目,通常在過濾完一個大的數據集之後進行此操作

repartition(numpartitions)

將RDD中所有records平均劃分到numparitions個partition中


action算子

reduce(func)

通過函數func聚集數據集中的所有元素,這個函數必須是關聯性的,確保可以被正確的併發執行

collect()

在driver的程序中,以數組的形式,返回數據集的所有元素,這通常會在使用filter或者其它操作後,返回一個足夠小的數據子集再使用

count()

返回數據集的元素個數

first()

返回數據集的第一個元素(類似於take(1))

take(n)

返回一個數組,由數據集的前n個元素組成。注意此操作目前並非並行執行的,而是driver程序所在機器

takeSample(withReplacement,num,seed)

返回一個數組,在數據集中隨機採樣num個元素組成,可以選擇是否用隨機數替換不足的部分,seed用於指定的隨機數生成器種子

saveAsTextFile(path)

將數據集的元素,以textfile的形式保存到本地文件系統hdfs或者任何其他Hadoop支持的文件系統,spark將會調用每個元素的toString方法,並將它轉換爲文件中的一行文本

takeOrderd(n,[ordering])

排序後的limit(n)

saveAsSequenceFile(path)

將數據集的元素,以sequencefile的格式保存到指定的目錄下,本地系統,hdfs或者任何其他hadoop支持的文件系統,RDD的元素必須由key-value對組成。並都實現了hadoop的writable接口或隱式可以轉換爲writable

saveAsObjectFile(path)

使用Java的序列化方法保存到本地文件,可以被sparkContext.objectFile()加載
countByKey()
對(K,V)類型的RDD有效,返回一個(K,Int)對的map,表示每一個可以對應的元素個數

foreach(func)

在數據集的每一個元素上,運行函數func,t通常用於更新一個累加器變量,或者和外部存儲系統做交互

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章