RDD介紹

transformation 轉換:

map:
lines.map(word => (word,1))

filter:
lines.filter(word => word.cotains("hello"))

flatmap 壓扁:
一個輸入對應多個輸出
例如讀取一個文本文件產生的結果 會全部在一層或者是一行 就是被壓扁了
val inputs=sc.textFile("/user/test.txt")
val lines=inputs.flatMap(line=>line.split(" "))

集合運算
rdd1.distinct()    去重
rdd1.union(rdd2)   合併
rdd1.intersection(rdd2) 交集
rdd1.subtract(rdd2) rdd1 有  rdd2沒有


action

在RDD上計算出一個結果 把結果返回給driver program:
reduce() 接收一個函數 作用在RDD兩個類型相同的元素上 返回新元素
可以實現,RDD中元素的累加,計數 和其他類型的聚集操作

val rdd = sc.parallelize(Array(1,2,3,3))
rdd.reduce((x,y)=>x+y)

collect(): 遍歷整個RDD,向driver program返回RDD內容
需要單機內存能夠容納下(因爲數據要拷貝給driver,測試使用)
大數據時候,使用saveAsTextFile() action等

take(n): 返回RDD的n個元素(同時嘗試訪問最少的partition) 
         返回結果是無序的 測試使用


top(): 排序(根據RDD中數據的比較器)

foreach():  計算RDD中的每個元素,但不返回到本地
            可以配合println()友好打印出數據

lines.foreach(println)

 

RDDS的血統關係圖:


    

spark維護着RDDS之間的依賴關係,叫做血統關係圖
spark使用血統關係圖來計算每個RDD的需求和恢復丟失數據

 

延遲計算(lazy Evaluation)


Spark 對RDDS的計算是 ,他們第一次使用action的時候
這種方式在處理大數據的時候特別有用,可以減少數據的傳輸
spark內部記錄metadata表名transformations操作已經被響應了
加載數據也是延遲計算,數據只有在必要時候,纔會被加載進去

 

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