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

【Spark107】Spark SQL动态代码生成三

 
阅读更多

代码

 

2015-09-02 14:46:27,226-[TS] DEBUG Executor task launch worker-1 org.apache.spark.sql.catalyst.expressions.codegen.GenerateSafeProjection - code for input[0, StringType],input[1, StringType],input[2, StringType],input[3, StringType],input[4, StringType]:

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

class SpecificSafeProjection extends org.apache.spark.sql.catalyst.expressions.codegen.BaseProjection {
  
  private org.apache.spark.sql.catalyst.expressions.Expression[] expressions;
  private org.apache.spark.sql.catalyst.expressions.MutableRow mutableRow;
  
  
  
  public SpecificSafeProjection(org.apache.spark.sql.catalyst.expressions.Expression[] expr) {
    expressions = expr;
    mutableRow = new org.apache.spark.sql.catalyst.expressions.GenericMutableRow(5);
    
  }
  
  public Object apply(Object _i) {
    InternalRow i = (InternalRow) _i;
    /* input[0, StringType] */
    
    boolean isNull0 = i.isNullAt(0);
    UTF8String primitive1 = isNull0 ? null : (i.getUTF8String(0));
    
    if (isNull0) {
      mutableRow.setNullAt(0);
    } else {
      
      mutableRow.update(0, primitive1.clone().clone());
    }
    /* input[1, StringType] */
    
    boolean isNull2 = i.isNullAt(1);
    UTF8String primitive3 = isNull2 ? null : (i.getUTF8String(1));
    
    if (isNull2) {
      mutableRow.setNullAt(1);
    } else {
      
      mutableRow.update(1, primitive3.clone().clone());
    }
    /* input[2, StringType] */
    
    boolean isNull4 = i.isNullAt(2);
    UTF8String primitive5 = isNull4 ? null : (i.getUTF8String(2));
    
    if (isNull4) {
      mutableRow.setNullAt(2);
    } else {
      
      mutableRow.update(2, primitive5.clone().clone());
    }
    /* input[3, StringType] */
    
    boolean isNull6 = i.isNullAt(3);
    UTF8String primitive7 = isNull6 ? null : (i.getUTF8String(3));
    
    if (isNull6) {
      mutableRow.setNullAt(3);
    } else {
      
      mutableRow.update(3, primitive7.clone().clone());
    }
    /* input[4, StringType] */
    
    boolean isNull8 = i.isNullAt(4);
    UTF8String primitive9 = isNull8 ? null : (i.getUTF8String(4));
    
    if (isNull8) {
      mutableRow.setNullAt(4);
    } else {
      
      mutableRow.update(4, primitive9.clone().clone());
    }
    
    return mutableRow;
  }
}

 

分享到:
评论

相关推荐

    基于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 组件集成,例如 Spark MLlib、Spark Streaming 等,实现了数据处理和分析的一体化。 四、...

    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部分解析过程

    Spark SQL 内部实现机制可以分为三个部分:SQL 编译、逻辑计划生成、物理计划生成。 Spark SQL 的编译过程可以分为两个阶段:语法分析和语义分析。在语法分析阶段,Spark SQL 会将 SQL 语句解析成抽象语法树...

    Python3实战Spark大数据分析及调度-第8章 Spark SQL.zip

    8. **性能优化**:Spark SQL提供了多种优化策略,如Catalyst优化器、代码生成等,以提高查询性能。这部分可能涵盖了如何调整执行计划和使用分区等技巧来提升处理速度。 9. **Spark SQL与Hive集成**:Spark SQL可以...

    spark源代码部署及编译生成

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

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

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

Global site tag (gtag.js) - Google Analytics