spark left join 和 right join 的坑

在SparkSQL开发中遇到一个挑战,尝试对一个3G的小表与两个大型表(150G和80G)进行leftjoin和rightjoin。发现无法广播小表进行优化。问题解决方法是通过先使用广播innerjoin生成两个中间小表,再用原始小表leftjoin这两个新表,显著减少了执行时间,从近2小时缩短到1分钟。
摘要由CSDN通过智能技术生成

前言

本文隶属于专栏《Spark异常问题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见 Spark异常问题汇总

问题描述

在开发 Spark SQL 的时候,遇到了一个问题

一个小表 3G 左右, 然后需要 left join 两个大表,一个150G 左右,一个 80G 左右。

  1. 发现没办法 left join 的时候广播左表;
  2. 尝试使用 right join ,广播右表,发现物理执行计划没生效。

问题定位

Spark SQL 在进行数据关联的时候,不能广播基表

也就是left join 只能广播右表,right join 只能广播左表。

问题解决

先利用广播做 inner join,生成两个小表; 然后在用原始小表 left join 这两个新生成的小表,完成最终结果数据产出。

任务从接近2小时,降低到了1 min 左右。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值