spark Join的中where的筛选与join的on 条件筛选探究

问题背景


因为最近在利用spark SQL 进行数据的处理,在做两表进行join操作的时候,在join过程中,想探究数据的筛选方式是否会对执行速度有一定的影响。

探究过程

数据准备

create table stu(
    id int ,  --唯一id
    name string,  -- 姓名
    subject string, -- 学科
    score int   --分数
)

插入数据,数据如下

stu 表:
+---+----+-------+-----+
| id|name|subject|score|
+---+----+-------+-----+
|  1|张三|   math|   50|
|  2|张三|English|   70|
|  3|张三|Chinese|   80|
|  4|李四|   math|   80|
|  5|李四|English|   40|
|  6|李四|Chinese|   60|
+---+----+-------+-----+

准备好teacher

create table teacher(
 id int,   -- 唯一id
 name string, -- 姓名
 subject string  -- 教授学科
)

插入数据

+---+--------+-------+
| id|    name|subject|
+---+--------+-------+
|  1|    jack|   math|
|  2|    tony|English|
|  3|ZhaoGang|Chinese|
+---+--------+-------+

提出问题

如果实现下述操作: 选取出每个学生的每个科目对应的老师
那么,针对这个问题的答案:

    select s.id,
          s.name,
          s.subject,
          s.score,
          t.name
     from stu s
left join teacher t
       on s.subject=t.subject 

结果如下:

+---+----+-------+-----+--------+
| id|name|subject|score|    name|
+---+----+-------+-----+--------+
|  3|张三|Chinese|   80|ZhaoGang|
|  5|李四|English|   40|    tony|
|  2|张三|English|   70|    tony|
|  6|李四|Chinese|   60|ZhaoGang|
|  4|李四|   math|   80|    jack|
|  1|张三|   math|   50|    jack|
+---+----+-------+-----+--------+

查看这条sql的执行计划,我们使用explain函数,下同:

== Physical Plan ==
*(2) Project [id#1173, name#1174, subject#1175, score#1176, name#1310]
+- *(2) BroadcastHashJoin [subject#1175], [subject#1311], LeftOuter, BuildRight
  :- *(2) ColumnarToRow
  :  +- FileScan parquet default.stu[id#1173,name#1174,subject#1175,s
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值