轉(zhuǎn)化操作:
RDD的轉(zhuǎn)化操作是返回新的RDD的操作。轉(zhuǎn)化出來(lái)的RDD是惰性求值的藐唠,只有在行動(dòng)操作中用到時(shí)才會(huì)被計(jì)算帆疟。
轉(zhuǎn)化操作雖然是惰性求值的,但是可以通過(guò)運(yùn)行行動(dòng)操作強(qiáng)制執(zhí)行宇立,比如count()踪宠,這種方法可以用于測(cè)試代碼。
示例:filter()過(guò)濾
rdd = sc.textFile("D:/log.txt") sundayrdd = inputRDD.fliter(lambda x: "sunday" in x)
我們使用filter()過(guò)濾了rdd中有“sunday”的行妈嘹。
filter() 或返回一個(gè)全新的RDD柳琢,不會(huì)改變inputRDD。
通過(guò)轉(zhuǎn)化操作润脸,從已經(jīng)存在的RDD中派生出新的RDD柬脸,Spark會(huì)使用譜系圖記錄各個(gè)RDD之前的依賴關(guān)系。
行動(dòng)操作:
行動(dòng)操作會(huì)把計(jì)算結(jié)果返回到驅(qū)動(dòng)器程序或者寫入外部存儲(chǔ)系統(tǒng)中毙驯。因?yàn)樾袆?dòng)操作會(huì)用需要生產(chǎn)實(shí)際的輸出倒堕,它們會(huì)強(qiáng)制執(zhí)行那些求值必須用到的RDD的轉(zhuǎn)化操作。繼續(xù)使用上面的例子爆价。
示例:collect()遍歷
print(sundayrdd.collect())
我們?cè)隍?qū)動(dòng)器程序中使用collect()在本地遍歷了sundayrdd垦巴。需要注意的是collect()會(huì)把RDD拉取到本地媳搪,只有本地機(jī)器的內(nèi)存能夠放的下時(shí)才能使用collect(),不能在大規(guī)模數(shù)據(jù)集上使用。如果需要在大規(guī)模數(shù)據(jù)集上使用可以用foreach().