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操作已經被響應了
加載數據也是延遲計算,數據只有在必要時候,纔會被加載進去