參考圖靈程序設(shè)計(jì)叢書忿危,Spark快速大數(shù)據(jù)分析一書
1.從外部讀取數(shù)據(jù)創(chuàng)建RDD
lines = sc.textFile("/path/to/README.md")
2.轉(zhuǎn)化操作和行動操作
轉(zhuǎn)化操作:返回一個新的RDD操作握童,如map()和fliter()碍沐,返回值是RDD刃永。所有的轉(zhuǎn)化操作都是惰性求職觅彰,在被調(diào)用行動操作之前不會開始計(jì)算施蜜。
行動操作:向驅(qū)動器程序返回結(jié)果或者把結(jié)果寫入外部系統(tǒng)的操作,會觸發(fā)實(shí)際的計(jì)算体谒,比如count()和first()杯聚,返回值是其他數(shù)據(jù)類型。
3.對單個RDD的轉(zhuǎn)化操作
對1個數(shù)據(jù)為{1,2,3,3}的RDD進(jìn)行操作
nums = sc.parallelize([1,2,3,3])
(1) map():對每個元素運(yùn)用一個函數(shù)抒痒,返回值構(gòu)成新的RDD
out =? nums.map(lambda x: x+1)
結(jié)果{2,3,4,4}
(2) fliter():返回一個傳給fliter()的函數(shù)元素構(gòu)成的RDD
out = nums.fliter(lambda x: x != 1)
結(jié)果{2,3,3}
(3) distinct():去重
out = nums.distinct()
結(jié)果{1,2,3}
(4)sample(withRepalcement,fraction,[seed]) :采樣幌绍,以及是否替換
out = nums.sample(false,0.5)
結(jié)果不確定
4.對兩個RDD的轉(zhuǎn)化操作
兩個RDD分別為nums{1,2,3}和other{3,4,5}
(1)union():生成1個RDD包含2個RDD的所有元素
out = nums.union(other)
結(jié)果{1,2,3,3,4,5}
(2)intersection():求兩個RDD共同元素的RDD
out = nums.intersection(other)
結(jié)果{3}
(3)intersection():求兩個RDD共同元素的RDD
out = nums.intersection(other)
結(jié)果{3}
(4)substract():移除其中另一個RDD的內(nèi)容
out = nums.substract(other)
結(jié)果{1,2}
(5)cartesian():兩個RDD的笛卡爾乘積
out =?nums.cartesian(other)
結(jié)果{(1,3),(1,4)傀广,……(3,5)}
5.對一個RDD的基本動作操作
對1個數(shù)據(jù)為{1,2,3,3}的RDD進(jìn)行操作
(1)collect():返回RDD中的所有元素
nums.collect()? #最好不要用颁独,除非你的RDD非常小
結(jié)果{1,2,3,3}
(2)count():RDD中的元素個數(shù)
nums.count()??
結(jié)果 4
(3)countbyvalue():RDD中各個元素及其出現(xiàn)的次數(shù)
nums.countbyvalue()
結(jié)果{(1,1),(2,1)伪冰,(3,2)}
(4)top(2):RDD中最前面的兩個元素
nums.top(2)
結(jié)果{1,2}
(5)reduce(func):并行整合RDD中所有的數(shù)據(jù)(如sum)
nums.reduce(lambda x,y: x+y)
結(jié)果9
(6)aggregate(func):和reduce相似誓酒,通常返回不同類型的函數(shù)
(7)foreach(func):對RDD每個元素使用給定的元素