sparksql优化之join

前言

本文是以下两篇文章的总结。
Spark SQL join的三种实现方式 - 多读书多看报 - 博客园 (cnblogs.com)

Spark SQL 之 Join 实现 - 云+社区 - 腾讯云 (tencent.com)


1 概念:流式遍历表(streamIter)和查找表(buildIter)

流式遍历表(streamIter)和查找表(buildIter)的概念见Spark SQL 之 Join 实现 - 云+社区 - 腾讯云 (tencent.com)

一般streamlter是大表,bulidler是小表

2 概念:sparksql种3种join的实现方式

sort merge join:有shuffle操作,适用于两张大表

broadcast join:把bulidler表广播到每个executor里,所以builder表应该小一点,sparks中默认builder表小于10M时使用broadcast join方法,适用于大表+小表

hash join:默认不开启,开启了sort merge join也比它差不了太多,适用于大表+小表(比broadcast的小表略大)

3 4种join方式

inner join:我们在写sql语句或者使用DataFrmae时,可以不用关心哪个是左表,哪个是右表,在spark sql查询优化阶段,spark会自动将大表设为左表,即streamIter,将小表设为右表,即buildIter。

left outer join是以左表为准,在右表中查找匹配的记录,如果查找失败,则返回一个所有字段都为null的记录。我们在写sql语句或者使用DataFrmae时,一般让大表在左边,小表在右边

right outer join是以右表为准,在左表中查找匹配的记录,如果查找失败,则返回一个所有字段都为null的记录。所以说,右表是streamIter,左表是buildIter,我们在写sql语句或者使用DataFrmae时,一般让大表在右边,小表在左边

full outer join 不用关心左表右表

参考文献

Spark SQL join的三种实现方式 - 多读书多看报 - 博客园 (cnblogs.com)

Spark SQL 之 Join 实现 - 云+社区 - 腾讯云 (tencent.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值