1.转换操作
1.1 一般的元素操作
#map 和 flatmap
#map接受一个函数,把这个函数用于每个rdd中的元素
nums = sc.parallelize([1,2,3,4])
squared = nums.map(lambda x:x*x) #[1,4,9,16]
#flatmap也是接受一个函数,把这个函数用于每个rdd中的元素 并扁平化
lines = sc.parallelize(["hello word","hi"])
words = lines.flatmap(lambda x:x.split()) # words = ["hello","word","hi"]
words = lines.map(lambda x:x.split()) # words = [["hello","word"],["hi"]],注意与flatmap 的区别
1.2 伪集合操作
#RDD 本身不是严格意义上的集合,但也支持许多数学上的集合操作
rdd.distinct() #转化操作去重
rdd.union(other) #返回一个包含两个rdd中所有元素的rdd
rdd.intersection(other) #只返回两个集合的交集
rdd.subtract(other) #返回只存在第一个rdd中而不存在第二个rdd中的元素
rdd.cartesian(other) #返回两个rdd的笛卡尔积
2.行动操作
2.1 一般的行动操作
#常用的一般化行动操作
rdd.collect() #返回全部元素
rdd.count() #统计元素个数
rdd.top(n) #倒序返回 n 个元素
rdd.take(n)#顺序返回 n 个元素
rdd.countByValue() #rdd各个元素统计个数
2.2 聚合操作(聚合操作也是行动操作,一般容易陷入误区)
#aggregate 和 reduce 聚合函数
#reduce:接受一个函数作为参数,这个函数要操作两个相同的元素类型的rdd数据并返回一个同样类型的新元素
#返回的只能是一个数字
rdd = sc.parallelize([1,2,3,4])
sum = rdd.reduce(lambda x,y:x+y) #返回rdd元素的累加值 10
#aggregate:接受三个函数作为参数,第一个提供初始值,第二个和三个是聚合,与reduce不同的是,把我们从返回值类型必须
#与所操作的rdd类型相同的限制中解放出来,比如这里可以聚合成元组类型,不一定是一个数字
sum = rdd.aggregate((0,0),(lambda x,y:(x[0]+y,x[1]+1)), \
(lambda x,y:(x[0]+y[0],x[1]+y[1]))) #sum = (10,4)