用广播机制优化spark sql案例

一个常用的sql示例

insert overwrite table tbl_result
select
  ……
from table1
left join table2 on table.id = tables1.id
left join table3 on table.id = tables1.id
left join table4 on table.id = tables1.id
left join table5 on table.id = tables1.id
left join table6 on table.id = tables1.id

实际情况可能更复杂,可能涉及大小表各种join、group等操作,处理小文件、shuffle等操作,导致一个任务非常非常慢。

观察运行发现,有些表很大,有些表很小,涉及大小表的,一般优化角度,是将小表广播,用map join代替reduce join。

比如talbe5和table6很小,那么可以将其广播,然后再关联操作

-- set spark.merge.mergefiles=true ;
-- set spark.merge.per.size_mb=128 ;

cache table table5_cache as SELECT * from table5;
cache table table6_cache as SELECT * from table6;

insert overwrite table tbl_result
select
  ……
from table1
left join table2 on table.id = tables1.id
left join table3 on table.id = tables1.id
left join table4 on table.id = tables1.id
left join table5_cache on table.id = tables1.id
left join table6_cache on table.id = tables1.id

默认广播到所有工作节点的表的最大大小10M,如果表超过了10M(10485760),还想让其广播,这时启动的时候,需要设置参数,比如将阀值调到100M

--spark.sql.autoBroadcastJoinThreshold=104857600

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值