算子

1.MapPartition:

遍历的单位是每一个partition
遍历原理:将每一个partition的数据先加载到内存,然后一条一条的遍历

MapPartition:遍历的单位是每一个partition
Map:遍历单位是每一条记录

MapPartition定义:
在这里插入图片描述
问题:
应用场景:将RDD的数据写入mysql orcale 应该选哪一个算子遍历RDD?
map? mapPartition

1.Map:当用map进行操作时:
在这里插入图片描述

出现的问题:创建数据库的连接太多

解决方案:
①.通过数据库连接池 (不可行 需要池非常大)
②.批量处理(①、批太大(sql语句拼接太长) ②、Executor中使用的是Driver端中的连接,socket类型的连接是不可以序列化的(可序列化的才能走网络传输))
③.使用mappartition算子

2.MapPartition:
在这里插入图片描述当前只有一个分区,只有一个创建连接
在这里插入图片描述
如果有10个分区时,会有10个连接


2.MapPartitionWithIndex:

在遍历每一个Partition的时候能够拿到每一个分区的ID号,这个算子一般用于测试环境(看RDD有几个分区,每个分区映射的什么数据,可以使用这个算子)
执行代码及结果:
在这里插入图片描述

3.CombineByKey:

遍历原理:根据key进行遍历聚

代码及运行结果、运行过程解析:
在这里插入图片描述
运行过程文字解析:
1.上述代码设置了两个分区,两个分区进行解析:先把同一个分区内的数据进行分组,相同的key数据放在一组。

2.分组完成后,开始第一步(初始化函数),得到相应的形式的数据,而且初始化函数是作用在第一个数据上(例如A的 1 上)

3.初始化完成以后,进行第二步:聚合操作,聚合操作中,如果A中有三个数据如: 1~ , 2 , 3 会进行两次聚合形成: 1~ $2$3

4.每个分区数据进行聚合完毕后,会进行大聚合 得到想要的数据

问题:
1.使用combinebykey来模拟groupByKey的功能,如何实现?

rdd.combineByKey(
x=>ListBuffer[x] 初始化函数
(s:listBuffer ,i:Int)=>s+=i combine聚合函数
(s1:listBuffer,s2:listBuffer)=>s1++=s2 reduce大聚合函数
)

2.使用combinebykey来模拟reduceByKey的功能,如何实现?

x=>x
(x1:Int,x2:int)=>x1+x2
(x1:Int,x2:int)=>x1+x2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值