前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SparkSQL内核解析-执行全过程概述

SparkSQL内核解析-执行全过程概述

作者头像
王知无-import_bigdata
发布2020-06-01 16:38:17
9570
发布2020-06-01 16:38:17
举报

从SQL到RDD

代码语言:javascript
复制
// 创建SparkSession类。从2.0开始逐步替代SparkContext称为Spark应用入口
var spark = SparkSession.builder().appName("appName").master("local").getOrCreate()
//创建数据表并读取数据
spark.read.json("./test.json").createOrReplaceTempView("test_table")
//通过SQL进行数据分析。可输入任何满足语法的语句
spark.sql("select name from test_table where a > 1").show()
SQL转换步骤
实际转换过程
InternalRow体系

用来表示一行数据的类,根据下标来访问和操作元素,其中每一列都是Catalyst内部定义的数据类型;物理算子树产生和转换的RDD类型为RDD[InternalRow];

  • BaseGenericInternalRow 实现了InternalRow中所有定义的get类型方法,通过调用此类定义的genericGet虚函数进行,实现在下级子类中
    • GenericInternalRow 构造参数是Array[Any],采用对象数据进行底层存储,不允许通过set进行改变
    • SpecificInternalRow 构造函数是Array[MutableValue] ,运行通过set进行修改
    • MutableUnsafeRow 用来支持对特定列数据进行修改
  • JoinedRow 用户Join操作,将两个InternalRow放在一起形成新的InternalRow
  • UnsafeRow 不采用Java对象存储方式,避免GC的开销。同时对行数据进行特殊编码使得更高效(Tungsten计划)。
TreeNode体系

TreeNode是SparkSQL中所有树节点的基类,定义了通用集合操作和树遍历接口

  • Expression是Catalyst的表达式体系
  • QueryPlan下包含逻辑算子树和物理执行算子树两个子类

Catalyst还提供了节点位置功能,根据TreeNode定位到对应SQL字串中的位置,方便Debug

Expression体系

一般指不需要触发执行引擎也能直接计算的单元,如四则运算,逻辑、转换、过滤等。主要定义5个方面的操作:

Expression也是TreeNode 的子类,因此可以调用所有TreeNpde方法,也能通过多级Expression组成复杂表达式。下面列举常用Expression:

  • Nondeterministic接口(deterministic=false;foldable=false 具有不确定性的Expression,如Rand())
  • Unevaluable接口 非可执行表达式,调用eval会抛出异常。主要用于未被逻辑计划解析或优化的表达式
  • CodegenFallback接口 不支持代码生成的表达式,一般用于第三方实现的无法生成Java代码的表达式(如Hive的UDF),在接口中实现具体调用方法
  • LeafExpression 叶子节点类型的表达式,不包含任何子节点,如Star,CurrentData
  • UnaryExpression 一元类型表达式,输入涉及一个子节点,如Abs
  • BinaryExpression 二元类型表达式
  • TernaryExpression 三元类型表达式
内部数据系统
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术与架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从SQL到RDD
    • SQL转换步骤
      • 实际转换过程
        • InternalRow体系
          • TreeNode体系
            • Expression体系
              • 内部数据系统
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档