为了账号安全,请及时绑定邮箱和手机立即绑定

spark broadcast join优化

标签:
Spark

在大量数据中对一些字段进行关联。

举例

ipTable:需要进行关联的几千条ip数据(70k)
hist:历史数据(百亿级别)

直接join将会对所有数据进行shuffle,需要大量的io操作,相同的key会在同一个partition中进行处理,任务的并发度也收到了限制。

webp

shuffle join

使用broadcast将会把小表分发到每台执行节点上,因此,关联操作都在本地完成,基本就取消了shuffle的过程,运行效率大幅度提高。

webp

broadcast join

样本数据(2000w)性能测试对比

小表没有进行broadcast

webp

shuffle join

进行了broadcast,可以看到连shuffle过程都省略了

webp

broadcast join

实现代码(spark1.5)

//读取ip表val df = ...//如果数据小于设定的广播大小则将该表广播,默认10Mdf.cache.count//注册表df.registerTempTable("ipTable")//关联sqlContext.sql("select * from (select * from ipTable)a join (select * from hist)b on a.ip = b.ip")

......

设置表广播的阈值,如果有需求且内存足够,可以将该值提高,默认10M

spark.sql.autoBroadcastJoinThreshold



作者:breeze_lsw
链接:https://www.jianshu.com/p/2c7689294a73


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
205
获赞与收藏
1007

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消