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

【Spark106】Spark SQL动态代码生成二

 
阅读更多

代码

 

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

class SpecificOrdering extends org.apache.spark.sql.catalyst.expressions.codegen.BaseOrdering {
  
  private org.apache.spark.sql.catalyst.expressions.Expression[] expressions;
  
  
  
  public SpecificOrdering(org.apache.spark.sql.catalyst.expressions.Expression[] expr) {
    expressions = expr;
    
  }
  
  @Override
  public int compare(InternalRow a, InternalRow b) {
    InternalRow i = null;  // Holds current row being evaluated.
    
    i = a;
    boolean isNullA2;
    UTF8String primitiveA3;
    {
      /* input[2, StringType] */
      
      boolean isNull0 = i.isNullAt(2);
      UTF8String primitive1 = isNull0 ? null : (i.getUTF8String(2));
      
      isNullA2 = isNull0;
      primitiveA3 = primitive1;
    }
    i = b;
    boolean isNullB4;
    UTF8String primitiveB5;
    {
      /* input[2, StringType] */
      
      boolean isNull0 = i.isNullAt(2);
      UTF8String primitive1 = isNull0 ? null : (i.getUTF8String(2));
      
      isNullB4 = isNull0;
      primitiveB5 = primitive1;
    }
    if (isNullA2 && isNullB4) {
      // Nothing
    } else if (isNullA2) {
      return -1;
    } else if (isNullB4) {
      return 1;
    } else {
      int comp = primitiveA3.compare(primitiveB5);
      if (comp != 0) {
        return comp;
      }
    }
    
    return 0;
  }
}

 

分享到:
评论

相关推荐

    基于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后生成的语法树

    2. **解析器生成**:ANTLR4工具会根据Grammar文件生成Java代码,这些代码实现了词法分析和语法分析的功能。词法分析器(Lexer)将输入的SQL字符串分解成一个个的词法单元(Token),而语法分析器(Parser)则根据...

    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 实验

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

    Spark SQL 2.3.0:深入浅出

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

    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 提供了多种功能,包括: * DataFrame:是一种分布式数据集,提供了详细的结构信息。DataFrame 可以从各种数据源生成,例如 JSON、Parquet 等。 * DataSet:是一种类型安全的 Dataset...

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

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

    mastering-spark-sql

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

    Spark-Sql源码解析

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

    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