`
bit1129
  • 浏览: 1067650 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Spark108】Spark SQL动态代码生成四

 
阅读更多

 

日志:

 

2015-09-02 14:46:27,765-[TS] DEBUG Executor task launch worker-3 org.apache.spark.sql.execution.joins.SortMergeJoin - Creating Projection: List(classId#2), inputSchema: List(stuId#0, stuName#1, classId#2), codegen:true
2015-09-02 14:46:27,766-[TS] DEBUG Executor task launch worker-3 org.apache.spark.sql.catalyst.expressions.codegen.GenerateProjection - MutableRow, initExprs: input[2, StringType] code:

 

 

代码

public SpecificProjection generate(org.apache.spark.sql.catalyst.expressions.Expression[] expr) {
  return new SpecificProjection(expr);
}

class SpecificProjection extends org.apache.spark.sql.catalyst.expressions.codegen.BaseProjection {
  private org.apache.spark.sql.catalyst.expressions.Expression[] expressions;
  
  
  
  public SpecificProjection(org.apache.spark.sql.catalyst.expressions.Expression[] expr) {
    expressions = expr;
    
  }
  
  @Override
  public Object apply(Object r) {
    return new SpecificRow((InternalRow) r);
  }
  
  final class SpecificRow extends org.apache.spark.sql.catalyst.expressions.codegen.CodeGenMutableRow {
    
    private UTF8String c0 = null;
    
    
    public SpecificRow(InternalRow i) {
      
      {
        // column0
        /* input[2, StringType] */
        
        boolean isNull0 = i.isNullAt(2);
        UTF8String primitive1 = isNull0 ? null : (i.getUTF8String(2));
        
        nullBits[0] = isNull0;
        if (!isNull0) {
          c0 = primitive1;
        }
      }
      
    }
    
    public int numFields() { return 1;}
    protected boolean[] nullBits = new boolean[1];
    public void setNullAt(int i) { nullBits[i] = true; }
    public boolean isNullAt(int i) { return nullBits[i]; }
    
    @Override
    public Object genericGet(int i) {
      if (isNullAt(i)) return null;
      switch (i) {
        case 0: return c0;
      }
      return null;
    }
    public void update(int i, Object value) {
      if (value == null) {
        setNullAt(i);
        return;
      }
      nullBits[i] = false;
      switch (i) {
        case 0: { c0 = (UTF8String)value; return;}
      }
    }
    
    
    
    @Override
    public int hashCode() {
      int result = 37;
      
      result *= 37; result += isNullAt(0) ? 0 : (c0.hashCode());
      return result;
    }
    
    @Override
    public boolean equals(Object other) {
      if (other instanceof SpecificRow) {
        SpecificRow row = (SpecificRow) other;
        
        if (nullBits[0] != row.nullBits[0] ||
          (!nullBits[0] && !(c0.equals(row.c0)))) {
          return false;
        }
        
        return true;
      }
      return super.equals(other);
    }
    
    @Override
    public InternalRow copy() {
      Object[] arr = new Object[1];
      if (!nullBits[0]) arr[0] = c0;
      return new org.apache.spark.sql.catalyst.expressions.GenericInternalRow(arr);
    }
  }
}

 

分享到:
评论

相关推荐

    基于antlr4 解析器,支持spark sql, tidb sql, flink sql, Sparkflink运行命令解析器

    在本项目中,ANTLR4被用来创建一个解析器,这个解析器支持多种SQL方言,包括Spark SQL、TiDB SQL以及Flink SQL,同时还支持Spark和Flink的运行命令解析。 Spark SQL是Apache Spark的一个组件,主要负责处理结构化的...

    剥离的Parser模块,用于查看Spark SQL语法解析SQL后生成的语法树

    在"ANTLR4-SqlBase-master"这个压缩包中,包含了使用ANTLR4工具生成的SqlBase解析器的相关代码,SqlBase是Apache Calcite项目的一个子项目,提供了SQL标准的语法定义。Spark SQL的解析层就是基于SqlBase的语法规则来...

    spark sql解析-源码分析

    7. **Code Generation**:Spark SQL利用Tungsten项目实现了代码生成技术,将优化后的物理计划转换为高效的Java或Scala代码,进一步提升了执行效率。 8. **Datalog与Catalyst规则**:Catalyst优化器利用Datalog规则...

    Spark DataFrame

    相比于之前的一些系统,Spark SQL提供了更加紧密的关系型与过程型处理之间的集成,通过声明式DataFrame API,可以和过程式的Spark代码无缝集成。这不仅使得Spark程序员能够利用关系型处理的优势,如声明式查询和优化...

    Learning Spark SQL - Aurobindo Sarkar

    此外,书中的案例研究和实战项目将帮助读者掌握Spark SQL在实际工作中的应用,比如大数据报表生成、实时数据分析等。 本书的章节可能涵盖以下主题: 1. Spark SQL基础:介绍Spark SQL的基本概念和环境设置。 2. ...

    mastering-spark-sql.pdf

    代码生成则是一种JIT编译技术,可以将Spark SQL生成的中间表示转换为高效执行的Java字节码。 文档还提到了Catalyst优化器,它是Spark SQL的查询优化引擎。Catalyst优化器使用一种领域特定语言(DSL),可以根据各种...

    Spark SQL操作大全.zip

    - **代码生成**:Spark SQL会将DataFrame操作转化为高效的执行计划,利用代码生成技术减少运行时的反射开销。 - **广播变量**:对于小表,可以使用广播join来减少网络传输,提高性能。 - **分区裁剪**:根据查询...

    Spark SQL 2.3.0:深入浅出

    提交后,Spark SQL会生成一个未完全解析的逻辑执行计划,接着利用内部的schema信息生成一个完整的逻辑执行计划。然后,该逻辑执行计划会被优化,最终生成一个优化后的逻辑执行计划。这个过程的核心是由Catalyst完成...

    Spark SQL 实验

    Spark SQL是Apache Spark的一个模块,它提供了对结构化数据的查询和处理能力。它允许用户使用SQL查询语言对分布式数据集进行查询和分析。Spark SQL不仅支持SQL标准,还支持 HiveQL,同时兼容Hive的表和UDF(用户定义...

    Spark.sql数据库部分的内容

    6. **性能优化**:Spark SQL采用了 Catalyst 编译器进行查询优化,包括代码生成、列式存储、过滤推导等,以提高查询性能。 7. **跨语言支持**:Spark SQL允许不同语言之间的交互,例如,Python用户可以创建...

    Spark SQL源码概览.zip

    Catalyst的Tungsten项目引入了基于IR(Intermediate Representation)的代码生成技术,可以生成高效的Java字节码,从而提高Spark SQL的执行性能。 8. **DataFrame操作**: DataFrame提供了丰富的操作接口,如...

    Spark编程基础:Spark SQL单元测验与答案.pdf

    Spark SQL 是 Spark 生态系统中的一个基于 SQL 的查询引擎,提供了高效、灵活的数据处理能力。本文档将从 Spark SQL 的架构、功能、应用场景等方面对知识点进行总结。 一、Spark SQL 架构 Spark SQL 的架构基于 ...

    Spark-Sql源码解析

    Spark-Sql 源码解析的主要流程包括语法分析、逻辑计划生成、物理计划生成和执行计划生成四个阶段。 在 Spark-Sql 源码解析中,SQL 语句首先被传递给 SqlParser,SqlParser 负责将 SQL 语句解析成抽象语法树(AST)...

    Spark SQL上海摩拜共享单车数据分析源码

    7. 执行优化:Spark SQL通过 Catalyst 编译器进行查询优化,包括列式存储、代码生成、动态分区裁剪等,以提高查询性能。 这个项目提供了完整的源码,对于学习如何使用Spark SQL进行大数据分析的开发者来说,这是一...

    mastering-spark-sql

    5. ** Catalyst优化器**:Spark SQL使用Catalyst作为其查询优化器,它可以自动进行各种查询优化,如代码生成、列裁剪、谓词下推等,提高查询性能。 6. **DataFrame的编程接口**:Spark SQL提供了Scala、Java、...

    spark框架SQL部分解析过程

    本书由 11 章构成,从源码层面深入介绍 Spark SQL 内部实现机制,以及在实际业务场景中的开发实践,其中包括 SQL 编译实现、逻辑计划的生成与优化、物理计划的生成与优化、Aggregation 算子和 Join 算子的实现与执行...

    spark源代码部署及编译生成

    以下将详细介绍Spark源代码的获取、环境配置、编译以及生成步骤。 1. **获取Spark源代码** Spark的源代码可以通过访问Apache官方网站或使用Git克隆仓库来获取。在终端中输入以下命令克隆Spark的GitHub仓库: ``...

    27:Spark2.3.x SQL大数据项目离线分析.rar

    Catalyst优化器负责转换和优化查询计划,Tungsten则通过自动生成Java字节码来提高执行效率,Code Generation能够将SQL查询转换为高效执行的本地代码。 三、离线分析流程 1. 数据加载:离线分析通常涉及从HDFS、Hive...

    Spark编程基础:Spark SQL单元测验与答案.docx

    * Spark SQL 执行计划生成和优化都由 Catalyst(函数式关系查询优化框架)负责。 二、DataFrame 操作 * DataFrame 是一种以RDD为基础的分布式数据集,提供了详细的结构信息。 * DataFrame 支持多种数据源,包括 ...

Global site tag (gtag.js) - Google Analytics