您的位置:首页 > 其它

一起学Spark(5) -- 基本rdd 常见的转换和行动操作

2018-01-26 17:57 288 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rdd 操作 spark