spark sql逻辑计划(优化完)转物理计划

本文探讨了Spark SQL中从优化后的逻辑执行计划转化为物理执行计划的过程,涉及UnaryNode、BinaryNode和LeafNode等物理算子。特别讨论了Join操作,包括其在不同表上的投影和SparkEquiInnerJoin算子。通过QueryPlanner的apply方法匹配strategies生成物理操作,并在Exchange.scala中根据outputPartitioning和requiredChildDistribution决定是否添加shuffle。
摘要由CSDN通过智能技术生成

在org.apache.spark.sql.execution中实现了有所有的数据库操作,但是注意这里仅仅是物理算子,这些操作分为三类:UnaryNode,LeafNode和BinaryNode。

一元节点UnaryNode的操作有:

Aggregate,DebugNode,EXchange,Filter,Generate,Project,Sample,Sort,StopAfter,TopK。

二元节点BinaryNode的操作有:

BroadcastNestedLoopJoin,CartesianProduct,SparkEquiInnerJoin。

叶子节点LeftNode的操作有:

ExistingRdd,ParquetTableScan。

分析一下join操作,join有两个孩子节点,是二元算子,其中会添加projection算子。有一种情况,比如T1表的a,b,c三个属性和T2表的a,d,e三个属性,如果在T1和T2表的a属性上做连接,最后输出三个属性T1.a,T1.b,T2.d。这样的话首先会在T1表上添加projection将a,b属性选出来,然后在T2表上添加Projection将a,d属性选出来,然后连接选出的属性,SparkEquiInnerJoin物理算子如下:

case class SparkEquiInnerJoin(
    leftKeys: Seq[Expression],
    rightKeys: Seq[Exp
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值