轉化操作:
RDD的轉化操作是返回新的RDD的操作。轉化出來的RDD是惰性求值的,只有在行動操作中用到時才會被計算。
轉化操作雖然是惰性求值的,但是可以通過運行行動操作強制執行,比如count(),這種方法可以用于測試代碼。
示例:filter()過濾
rdd = sc.textFile("D:/log.txt") sundayrdd = inputRDD.fliter(lambda x: "sunday" in x)
我們使用filter()過濾了rdd中有“sunday”的行。
filter() 或返回一個全新的RDD,不會改變inputRDD。
通過轉化操作,從已經存在的RDD中派生出新的RDD,Spark會使用譜系圖記錄各個RDD之前的依賴關系。
譜系圖
行動操作:
行動操作會把計算結果返回到驅動器程序或者寫入外部存儲系統中。因為行動操作會用需要生產實際的輸出,它們會強制執行那些求值必須用到的RDD的轉化操作。繼續使用上面的例子。
示例:collect()遍歷
print(sundayrdd.collect())
我們在驅動器程序中使用collect()在本地遍歷了sundayrdd。需要注意的是collect()會把RDD拉取到本地,只有本地機器的內存能夠放的下時才能使用collect(),不能在大規模數據集上使用。如果需要在大規模數據集上使用可以用foreach().