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

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)

 

 

 

 



 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值