参考图灵程序设计丛书,Spark快速大数据分析一书
1.从外部读取数据创建RDD
lines = sc.textFile("/path/to/README.md")
2.转化操作和行动操作
转化操作:返回一个新的RDD操作,如map()和fliter(),返回值是RDD。所有的转化操作都是惰性求职,在被调用行动操作之前不会开始计算。
行动操作:向驱动器程序返回结果或者把结果写入外部系统的操作,会触发实际的计算,比如count()和first(),返回值是其他数据类型。
3.对单个RDD的转化操作
对1个数据为{1,2,3,3}的RDD进行操作
nums = sc.parallelize([1,2,3,3])
(1) map():对每个元素运用一个函数,返回值构成新的RDD
out = nums.map(lambda x: x+1)
结果{2,3,4,4}
(2) fliter():返回一个传给fliter()的函数元素构成的RDD
out = nums.fliter(lambda x: x != 1)
结果{2,3,3}
(3) distinct():去重
out = nums.distinct()
结果{1,2,3}
(4)sample(withRepalcement,fraction,[seed]) :采样,以及是否替换
out = nums.sample(false,0.5)
结果不确定
4.对两个RDD的转化操作
两个RDD分别为nums{1,2,3}和other{3,4,5}
(1)union():生成1个RDD包含2个RDD的所有元素
out = nums.union(other)
结果{1,2,3,3,4,5}
(2)intersection():求两个RDD共同元素的RDD
out = nums.intersection(other)
结果{3}
(3)intersection():求两个RDD共同元素的RDD
out = nums.intersection(other)
结果{3}
(4)substract():移除其中另一个RDD的内容
out = nums.substract(other)
结果{1,2}
(5)cartesian():两个RDD的笛卡尔乘积
out = nums.cartesian(other)
结果{(1,3),(1,4),……(3,5)}
5.对一个RDD的基本动作操作
对1个数据为{1,2,3,3}的RDD进行操作
(1)collect():返回RDD中的所有元素
nums.collect() #最好不要用,除非你的RDD非常小
结果{1,2,3,3}
(2)count():RDD中的元素个数
nums.count()
结果 4
(3)countbyvalue():RDD中各个元素及其出现的次数
nums.countbyvalue()
结果{(1,1),(2,1),(3,2)}
(4)top(2):RDD中最前面的两个元素
nums.top(2)
结果{1,2}
(5)reduce(func):并行整合RDD中所有的数据(如sum)
nums.reduce(lambda x,y: x+y)
结果9
(6)aggregate(func):和reduce相似,通常返回不同类型的函数
(7)foreach(func):对RDD每个元素使用给定的元素