SparkSQL内核解析之逻辑计划 批量计算expresssql编程算法 LogicalPlan的父类QueryPlan主要分为六个模块:– 输入输出 涉及QueryPlan内属性相关的输入输出– 基本属性 QueryPlan内的基本属性– 字符串 主要用于打印QueryPlan的树形结构信息– 规范化 类似Expression中的规范化– 表达式操作– 约束 本质上也是数据过滤条件的一...
SparkSQL的逻辑计划分为unresolved LogicalPlan、analyzed LogicPlan和optimized LogicPlan3个阶段,分别通过Analyzer和Optimizer处理后得到 LogicalPlan LogicalPlan作为逻辑计划处理阶段的核心类,保存了逻辑算子节点的基本信息和基础操作,包括父子节点关系、输入输出信息、逻辑操作等。为更深入了解LogicalPlan的信息,我们分别从其...
对分析过后的 logical plan,进行优化 对优化过后的 logical plan,生成 physical plan 根据physical plan,生成 rdd 的程序,并且提交运行 代码语言:javascript 复制 SELECTA,BFROMTESTDATA2WHEREA>2 结合上图,写测试用例,每一步生成的执行计划如下: Spark sql解析会生成四种plan: Parsed Logical Plan, Analyzed Logical...
//logicalPlan为queryExecution里执行完命令替换后的逻辑计划,例如DDL命令等 //一般情况下,queryExecution.commandExecuted == queryExecution.logicalPlan @transient private[sql] val logicalPlan: LogicalPlan = { val plan = queryExecution.commandExecuted if (sparkSession.sessionState.conf.getConf(SQLConf.FAIL_...
Analyzed LogicalPlan生成 Sql经过AstBuilder的处理得到的 未解析逻辑算子树 主要由UnresolvedRelation和UnresolvedAttribute两个对象组成。Analyzer主要作用就是将这两种对象or表达式解析为有类型的对象 Catalog体系分析 Catalog通常理解为一个容器或数据库命名空间中的一个层次,在Spark中主要用于各种函数资源和元数据的统一管理...
1.进行 DataFrame/Dataset/SQL 编程; 2.如果是有效的代码,即代码没有编译错误,Spark 会将其转换为一个逻辑计划; 3.Spark 将此逻辑计划转换为物理计划,同时进行代码优化; 4.Spark 然后在集群上执行这个物理计划 (基于 RDD 操作) 。 4.1 逻辑计划(Logical Plan) ...
SparkSQL逻辑计划概述 逻辑计划阶段被定义为LogicalPlan类,主要有三个阶段: 由SparkSqlParser中的AstBuilder将语法树的各个节点转换为对应LogicalPlan节点,组成未解析的逻辑算子树,不包含数据信息与列信息 由Analyzer将一系列规则作用在未解析逻辑算子树上,生成解析后的逻辑算子树 ...
Spark SQL的查询计划执行过程是通过一系列优化和分布式计算步骤来完成的。Spark SQL首先将SQL语句解析并...
cache manager阶段是逻辑计划的一部分,作用在sql分析器之后,sql优化器之前。 当我们触发一个query的时候,查询计划将会被处理以及转化,在处理到cachemanager阶段(在优化阶段之前)的时候,spark将会检查分析计划的每个子计划是否存储在cachedData里。如果存在,则说明同样的计划已经被执行过了,所以可以重新使用该缓存,并且使用...
这个阶段是将Optimized Logical Plan 转换为Spark Plan 前面讲述的主要是逻辑计划,即 SQL 如何被解析成Logical Plan,以及 Logical Plan 如何被 Analyzer 以及 Optimzer,接下来就是逻辑计划被翻译成物理计划,即 SparkPlan。 5.PrepareForExecution阶段 该阶段主要是将Spark Plan 转换为Executed Plan ...