spark 算子调优之使用foreachPartition优化写数据库的性能

使用默认的foreache的性能缺陷是哪里?

首先,对于每条数据,都要单独去调用一次function,task为每个数据,都要去执行一次function函数。

 

如果100万条数据(一个partition),调用100万次,性能比较差

 

另外一个非常非常重要的一点

 

如果每个数据,你都要去创建一个数据库连接,那么你就得建立100万次数据库连接,但是要注意的是,数据库连接的创建和销毁,都是非常非常消耗性能的,虽然我们之前已经用了数据库连接池,只是创建了固定数量的数据库连接,但是你还是得多次通过数据库连接向mysql发送一条sql语句,如果有100万条,那么就100万次发送sql语句

 

以上俩点,(多次创建数据库连接,多次发送SQL语句,)都是非常非常消耗性能的

 

解决:

foreachpartition算子来写库:

1. 对于我们写的function函数,就调用一次,一次传入一个partition所有数据

2. 主要创建或者获取一个数据库连接就可以

3. 只要想数据库发送一次sql语句和多组参数即可

 

在使用foreache 还是 foreachePartition算子上,如果数据量不是很大可一用后者,数据量大后者容易OOM

那么用foreachePartition算子可以用批处理sql语句方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值