第66课:Spark SQL下Parquet中PushDown的实现

33 篇文章 0 订阅
6 篇文章 0 订阅

内容:

    1.SparkSQL下的PushDown的价值
    2.SparkSQL下的Parquet下的pushDown的实现

一、SparkSQL下的PushDown的价值

    1.假设通过DataFrame,df.select(a,b,c).filter(by a).filter(by b).select(c).filter(by c)这样的查询,在optimizer阶段,需要合并多个filters(CombineFilters),并调整算子间的顺序,例如将部分filter移到select等前面(PushPredicateThroughAggregate/Generate/Join/Project)。filter前需要操作一大批数据,但filter后只需要操作很小一部分数据,SQL优化时就希望一开始就只操作这一小部分数据,而不需要把所有数据都导入进来,因为最终还是要被过滤掉。
    2.PushDown本身既有SQL语法的层面也有物理执行的层面。语法层面,SparkSQL和hive都有自己的语法实现。
    3.PushDown是要把操作放到叶子节点上。这也是为什么叫谓词下推(Predicate pushdown)的原因。当把操作放到叶子节点时就导致操作在数据源上执行。 
    4.SQL角度讲有基本的过滤、语法树。语法树过滤也有2个层次,一个是基本的过滤,一个是真正的解析。优化是对各种filter进行合并,而且会调整顺序。最后从Catalyst角度,它会变成RDD进行操作,最后会装入到DataSourceStrategy。DataSourceStrategy会通过Parquet高层的API来操作Parquet。Parquet内部再收到上层的过滤条件的时候底层如何映射;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值