Spark: Transformation和Action

本文提供的是0.7.3版本中的action和transformation接口,RDD提供了兩種類型的操做:transformation和action html

1,transformation是獲得一個新的RDD,方式不少,好比從數據源生成一個新的RDD,從RDD生成一個新的RDD apache

2,action是獲得一個值,或者一個結果(直接將RDD cache到內存中) api

全部的transformation都是採用的懶策略,就是若是隻是將transformation提交是不會執行計算的,計算只有在action被提交的時候才被觸發。下面介紹一下RDD的常見操做:(注意是dataset仍是RDD) 數組

transformation操做: 併發

map(func):對調用map的RDD數據集中的每一個element都使用func,而後返回一個新的RDD,這個返回的數據集是分佈式的數據集 分佈式

filter(func) : 對調用filter的RDD數據集中的每一個元素都使用func,而後返回一個包含使func爲true的元素構成的RDD 函數

flatMap(func):和map差很少,可是flatMap生成的是多個結果 oop

mapPartitions(func):和map很像,可是map是每一個element,而mapPartitions是每一個partition spa

mapPartitionsWithSplit(func):和mapPartitions很像,可是func做用的是其中一個split上,因此func中應該有index .net

sample(withReplacement,faction,seed):抽樣

union(otherDataset):返回一個新的dataset,包含源dataset和給定dataset的元素的集合

distinct([numTasks]):返回一個新的dataset,這個dataset含有的是源dataset中的distinct的element

groupByKey(numTasks):返回(K,Seq[V]),也就是hadoop中reduce函數接受的key-valuelist

reduceByKey(func,[numTasks]):就是用一個給定的reduce func再做用在groupByKey產生的(K,Seq[V]),好比求和,求平均數

sortByKey([ascending],[numTasks]):按照key來進行排序,是升序仍是降序,ascending是boolean類型

join(otherDataset,[numTasks]):當有兩個KV的dataset(K,V)和(K,W),返回的是(K,(V,W))的dataset,numTasks爲併發的任務數

cogroup(otherDataset,[numTasks]):當有兩個KV的dataset(K,V)和(K,W),返回的是(K,Seq[V],Seq[W])的dataset,numTasks爲併發的任務數

cartesian(otherDataset):笛卡爾積就是m*n,你們懂的


action操做:

reduce(func):說白了就是彙集,可是傳入的函數是兩個參數輸入返回一個值,這個函數必須是知足交換律和結合律的

collect():通常在filter或者足夠小的結果的時候,再用collect封裝返回一個數組

count():返回的是dataset中的element的個數

first():返回的是dataset中的第一個元素

take(n):返回前n個elements,這個士driver program返回的

takeSample(withReplacement,num,seed):抽樣返回一個dataset中的num個元素,隨機種子seed

saveAsTextFile(path):把dataset寫到一個text file中,或者hdfs,或者hdfs支持的文件系統中,spark把每條記錄都轉換爲一行記錄,而後寫到file中

saveAsSequenceFile(path):只能用在key-value對上,而後生成SequenceFile寫到本地或者hadoop文件系統

countByKey():返回的是key對應的個數的一個map,做用於一個RDD

foreach(func):對dataset中的每一個元素都使用func


在spark新版中,也許會有更多的action和transformation,能夠參照spark的主頁

hadoop提供的接口只有map和reduce函數,spark是mapreduce的擴展,提供兩類操做,而不是兩個,使使用更方便,開發時的代碼量會盡可能的被spark的這種多樣的API減小數十倍

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

相關文章
相關標籤/搜索