Spark之Transformation和Action

一、RDD的兩種類型操做

<IMG alt=http://static.oschina.net/uploads/space/2015/0109/211004_Nkr7_76720.jpg src="http://static.oschina.net/uploads/space/2015/0109/211004_Nkr7_76720.jpg" _src="http://static.oschina.net/uploads/space/2015/0109/211004_Nkr7_76720.jpg">html

 RDD的建立:apache

    (SparkContext) sc.parallelize(collection) //將一個集合轉換成RDD數組

    sc.textFile("path..") //讀取一個文件並轉換成RDD分佈式

二、Transformations類型

    延遲執行,一個RDD經過該操做產生的新的RDD時不會當即執行,只有等到Action操做纔會真正執行。ide

map(func):對調用map的RDD數據集中的每一個element都使用func,而後返回一個新的RDD,這個返回的數據集是分佈式的數據集
示例:
var list = List(1,2,3,4,5,6); //定義一個List集合
//對於調用map的list而言,num表示list中每個element,每一個element都*2,num能夠理解爲一個變量名
list.map(num=>num*2) 
結果:List(2,4,6,8,10,12)
//list.map(num=>num*2)能夠當作是集合中每一個element*2
filter(func):對調用filter的RDD數據集中的每一個元素都使用func,而後返回一個包含使func爲true的元素構成的RDD
示例:
var list = List(1,2,3,4,5,6); //定義一個List集合
//對於調用filter的list而言,num表示list中每個element,篩選每一個符合>2條件的element
list.filter(num=>num>2) //參數必須是一個Boolean
打印結果:List[Int] = List(3, 4, 5, 6)
flatMap(func):和map差很少,可是flatMap生成的是多個結果 
示例:
// 定義一個元素爲String的集合
var strList = List("hello world","hello xm","hello xh","hello , Im fine","hello how are you?")
// 將每一個element切分紅多個字段,flatMap每一個參與計算的element必須返回多個結果或者一個數組,例如返回的結果
// 能夠這樣:List(Array(...),Array(...),...)
strList.flatMap(stsr=>str.split(" "))
打印結果:List(hello, world, hello, xm, hello, xh, hello, ,, Im, fine, hello, how, are, you?)
groupByKey():將相同key的value進行分組
groupByReduce():將相同key的value進行合併計算
union:將兩個RDD聚合,例如:RDD1->(1,2,3),RDD2->(1,2,3),RDD1 union RDD2 -> (1,2,3,1,2,3)
join:將兩個RDD取笛卡爾積
SortByKey(boolean):按照key進行排序,true爲降序,false爲升序,若是想將value進行排序,能夠將key和value位置互換,互換操做:map(x=>(x._2,x._1))

三、Actions類型

    提交Spark做業,當Action時,Transformation類型的操做纔會真正執行計算操做,而後產生最終結果輸出。ui

cache:將結果放到內存
count:統計element的數量
collect:返回一個數組結果
reduce:對全部的element進行合併
lookup:針對某個key查看value
save:將結果保存到磁盤

四、官方文檔

    其餘的一些操做能夠參考官方文檔:http://spark.apache.org/docs/latest/programming-guide.html#transformationsspa

相關文章
相關標籤/搜索