• 死磕sparkSQL源码之TreeNode


    InternalRow体系

    学习TreeNode之前,我们先了解下InternalRow。

    对于我们一般接触到的数据库关系表来说,我们对于数据库中的数据操作都是按照“行”为单位的。在spark sql内部实现中,InternalRow是用来表示这一行行数据的类。看下源码中的解释,InternalRow作为一个抽象类,包numFields 和 update 方法,以及各列数据对应的 get 与 set 方法,但具体的实现逻辑体现在不同的子类中

    1. /**
    2. * An abstract class for row used internally in Spark SQL, which only contains the columns as
    3. * internal types.
    4. 一个抽象类,用于表示spark SQL内部行,只包含内部类型的多个列(其实就是表示一行行数据的类)
    5. */

    详细代码这里就不贴了,整理下一些重要接口的功能含义好了,注意InternalRow中都是根据下标来访问和操作列元素的 。

    InternalRow实现类包括,BaseGenericinternalRow、UnsafeRow 和 JoinedRow 3 个直接子类

    • BaseGenericinternalRow:也是一个抽象类,实现了SpecializedGetters类中定义的所有GET方法,但是最终还是调用genericGet方法实现最终逻辑,genericGet方法在BaseGenericinternalRow内中只是定义了一个接口,最终实现在BaseGenericinternalRow的子类中。
    • JoinedRow:该类主要用于join操作,两个InternalRow放在一起形成新的InternalRow,在sparksql 聚合和join相关操作中,会用的比较多
    • UnsafeRow:不采用 Java 对象存储的方式,避免了 JVM 中垃圾回收( GC )的代价 。 此外,UnsafeRow 对行数据进行了特定的编码,使得存储更加高效 。

    TreeNode体系

    接下来正式开始进行TreeNode的学习

    TreeNode是Spark SQL中所有树结构的基类,定义了一系列通用的集合操作和树遍历的操作接口。我们先看下TreeNode的代码

    1. abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product with TreePatternBits {
    2. }

    首先TreeNode是一个抽象类,一个泛型类;这里TreeNode[BaseType <: TreeNode[BaseType]]这种书写方式,不知道大家会不会很陌生,反正我一开始看的时候,觉得不知道咋回事,那么我们来一起理解写,这个具体是什么含义:

    • 首先,我们很明确这个TreeNode是个泛型,我们把[]中的看作一个T,其实就是TreeNode[T],这个没问题
    • 接下里,我们要理解下“<:”这个符号的含义,这属于scala泛型中的知识,上边界和下边界。上边界是“<:”,下边界是“>:”;上边界,拿代码中的定义的含义解释就是BaseType必须是TreeNode[BaseType]的子类。也就是说TreeNode的泛型类型用BaseType表示,泛型类型比如是TreeNode类的子类

    另外,TreeNode还继承了Product接口,对于prod

  • 相关阅读:
    golang for range time.Ticker 和 time.Timer时间通道使用示例 - 每隔指定时间执行一次,执行指定时长后退出执行
    【跨域问题】
    微服务框架 SpringCloud微服务架构 11 自定义镜像 11.2 Dockerfile
    Dubbo 原理和机制详解 (非常全面)
    Linux运行jmeter报错java.sql.SQLException:Cannot create PoolableConnectionFactory
    Windows系统下环境安装
    filebeat(8.9.0)采集日志到logstash,由logstash发送的es
    JS流程控制语句_选择分支
    基于一种新颖强化学习 (RL) 的电机控制与电力驱动控制研究(Python代码实现)
    基于matab GUI的图形处理火焰检测系统
  • 原文地址:https://blog.csdn.net/riluomati/article/details/127950109