Spark的action和transformation

http://blog.csdn.net/egraldloi/article/details/16343733

http://www.cnblogs.com/dasn/articles/5644919.html


彈性分佈式數據集(Resilient Distributed Dataset ,RDD),它是邏輯集中的實體,但在集羣中的多臺機器上進行了分區。通過對多臺機器上不同RDD聯合分區的控制,就能夠減少機器之間數據混合(data shuffling)。Spark提供了一個“partition-by”運算符,能夠通過集羣中多臺機器之間對原始RDD進行數據再分配來創建一個新的RDD。

RDD可以隨意在RAM中進行緩存,因此它提供了更快速的數據訪問。目前緩存的粒度在處在RDD級別,因此只能是全部RDD被緩存。在集羣中有足夠的內存時,Spark會根據LRU驅逐算法將RDD進行緩存。

RDD提供了一個抽象的數據架構,我們不必擔心底層數據的分佈式特性,而應用邏輯可以表達爲一系列轉換處理。

通常應用邏輯是以一系列TRANSFORMATION和ACTION來表達的。前者在RDD之間指定處理的相互依賴關係DAG,後者指定輸出的形式。調度程序通過拓撲排序來決定DAG執行的順序,追蹤最源頭的節點或者代表緩存RDD的節點。


典型的執行順序如下:

  1. RDD直接從外部數據源創建(HDFS、本地文件等)
  2. RDD經歷一系列的TRANSFORMATION( map、flatMap、filter、 groupBy、join),每一次都會產生不同的RDD,供給下一個TRANSFORMATION使用
  3. 最後一步就是ACTION(count、collect、save、take),將最後一個RDD進行轉換,輸出到外部數據源。


那麼典型的action和transformation有哪些呢?

transformation:

  • 1. map(func):對調用map的RDD數據集中的每個element都使用func,然後返回一個新的RDD,這個返回的數據集是分佈式的數據集  
  • 2. filter(func) : 對調用filter的RDD數據集中的每個元素都使用func,然後返回一個包含使func爲true的元素構成的RDD  
  • 3. flatMap(func):和map差不多,但是flatMap生成的是多個結果  
  • 4. mapPartitions(func):和map很像,但是map是每個element,而mapPartitions是每個partition  
  • 5. mapPartitionsWithSplit(func):和mapPartitions很像,但是func作用的是其中一個split上,所以func中應該有index  
  • 6. sample(withReplacement,faction,seed):抽樣  
  • 7. union(otherDataset):返回一個新的dataset,包含源dataset和給定dataset的元素的集合  
  • 8. distinct([numTasks]):返回一個新的dataset,這個dataset含有的是源dataset中的distinct的element  
  • 9. groupByKey(numTasks):返回(K,Seq[V]),也就是hadoop中reduce函數接受的key-valuelist  
  • 10. reduceByKey(func,[numTasks]):就是用一個給定的reduce func再作用在groupByKey產生的(K,Seq[V]),比如求和,求平均數  
  • 11. sortByKey([ascending],[numTasks]):按照key來進行排序,是升序還是降序,ascending是boolean類型  
  • 12. join(otherDataset,[numTasks]):當有兩個KV的dataset(K,V)和(K,W),返回的是(K,(V,W))的dataset,numTasks爲併發的任務數  
  • 13. cogroup(otherDataset,[numTasks]):當有兩個KV的dataset(K,V)和(K,W),返回的是(K,Seq[V],Seq[W])的dataset,numTasks爲併發的任務數  
  • 14. cartesian(otherDataset):笛卡爾積就是m*n,大家懂的 

action

  • 1. reduce(func):說白了就是聚集,但是傳入的函數是兩個參數輸入返回一個值,這個函數必須是滿足交換律和結合律的  
  • 2. collect():一般在filter或者足夠小的結果的時候,再用collect封裝返回一個數組  
  • 3. count():返回的是dataset中的element的個數  
  • 4. first():返回的是dataset中的第一個元素  
  • 5. take(n):返回前n個elements,這個士driver program返回的  
  • 6. takeSample(withReplacement,num,seed):抽樣返回一個dataset中的num個元素,隨機種子seed  
  • 7. saveAsTextFile(path):把dataset寫到一個text file中,或者hdfs,或者hdfs支持的文件系統中,spark把每條記錄都轉換爲一行記錄,然後寫到file中  
  • 8. saveAsSequenceFile(path):只能用在key-value對上,然後生成SequenceFile寫到本地或者hadoop文件系統  
  • 9. countByKey():返回的是key對應的個數的一個map,作用於一個RDD  
  • 10. foreach(func):對dataset中的每個元素都使用func  



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