日志:
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被用来创建一个解析器,这个解析器支持多种SQL方言,包括Spark SQL、TiDB SQL以及Flink SQL,同时还支持Spark和Flink的运行命令解析。 Spark SQL是Apache Spark的一个组件,主要负责处理结构化的...
在"ANTLR4-SqlBase-master"这个压缩包中,包含了使用ANTLR4工具生成的SqlBase解析器的相关代码,SqlBase是Apache Calcite项目的一个子项目,提供了SQL标准的语法定义。Spark SQL的解析层就是基于SqlBase的语法规则来...
7. **Code Generation**:Spark SQL利用Tungsten项目实现了代码生成技术,将优化后的物理计划转换为高效的Java或Scala代码,进一步提升了执行效率。 8. **Datalog与Catalyst规则**:Catalyst优化器利用Datalog规则...
相比于之前的一些系统,Spark SQL提供了更加紧密的关系型与过程型处理之间的集成,通过声明式DataFrame API,可以和过程式的Spark代码无缝集成。这不仅使得Spark程序员能够利用关系型处理的优势,如声明式查询和优化...
此外,书中的案例研究和实战项目将帮助读者掌握Spark SQL在实际工作中的应用,比如大数据报表生成、实时数据分析等。 本书的章节可能涵盖以下主题: 1. Spark SQL基础:介绍Spark SQL的基本概念和环境设置。 2. ...
代码生成则是一种JIT编译技术,可以将Spark SQL生成的中间表示转换为高效执行的Java字节码。 文档还提到了Catalyst优化器,它是Spark SQL的查询优化引擎。Catalyst优化器使用一种领域特定语言(DSL),可以根据各种...
- **代码生成**:Spark SQL会将DataFrame操作转化为高效的执行计划,利用代码生成技术减少运行时的反射开销。 - **广播变量**:对于小表,可以使用广播join来减少网络传输,提高性能。 - **分区裁剪**:根据查询...
提交后,Spark SQL会生成一个未完全解析的逻辑执行计划,接着利用内部的schema信息生成一个完整的逻辑执行计划。然后,该逻辑执行计划会被优化,最终生成一个优化后的逻辑执行计划。这个过程的核心是由Catalyst完成...
Spark SQL是Apache Spark的一个模块,它提供了对结构化数据的查询和处理能力。它允许用户使用SQL查询语言对分布式数据集进行查询和分析。Spark SQL不仅支持SQL标准,还支持 HiveQL,同时兼容Hive的表和UDF(用户定义...
6. **性能优化**:Spark SQL采用了 Catalyst 编译器进行查询优化,包括代码生成、列式存储、过滤推导等,以提高查询性能。 7. **跨语言支持**:Spark SQL允许不同语言之间的交互,例如,Python用户可以创建...
Catalyst的Tungsten项目引入了基于IR(Intermediate Representation)的代码生成技术,可以生成高效的Java字节码,从而提高Spark SQL的执行性能。 8. **DataFrame操作**: DataFrame提供了丰富的操作接口,如...
Spark SQL 是 Spark 生态系统中的一个基于 SQL 的查询引擎,提供了高效、灵活的数据处理能力。本文档将从 Spark SQL 的架构、功能、应用场景等方面对知识点进行总结。 一、Spark SQL 架构 Spark SQL 的架构基于 ...
Spark-Sql 源码解析的主要流程包括语法分析、逻辑计划生成、物理计划生成和执行计划生成四个阶段。 在 Spark-Sql 源码解析中,SQL 语句首先被传递给 SqlParser,SqlParser 负责将 SQL 语句解析成抽象语法树(AST)...
7. 执行优化:Spark SQL通过 Catalyst 编译器进行查询优化,包括列式存储、代码生成、动态分区裁剪等,以提高查询性能。 这个项目提供了完整的源码,对于学习如何使用Spark SQL进行大数据分析的开发者来说,这是一...
5. ** Catalyst优化器**:Spark SQL使用Catalyst作为其查询优化器,它可以自动进行各种查询优化,如代码生成、列裁剪、谓词下推等,提高查询性能。 6. **DataFrame的编程接口**:Spark SQL提供了Scala、Java、...
本书由 11 章构成,从源码层面深入介绍 Spark SQL 内部实现机制,以及在实际业务场景中的开发实践,其中包括 SQL 编译实现、逻辑计划的生成与优化、物理计划的生成与优化、Aggregation 算子和 Join 算子的实现与执行...
以下将详细介绍Spark源代码的获取、环境配置、编译以及生成步骤。 1. **获取Spark源代码** Spark的源代码可以通过访问Apache官方网站或使用Git克隆仓库来获取。在终端中输入以下命令克隆Spark的GitHub仓库: ``...
Catalyst优化器负责转换和优化查询计划,Tungsten则通过自动生成Java字节码来提高执行效率,Code Generation能够将SQL查询转换为高效执行的本地代码。 三、离线分析流程 1. 数据加载:离线分析通常涉及从HDFS、Hive...
* Spark SQL 执行计划生成和优化都由 Catalyst(函数式关系查询优化框架)负责。 二、DataFrame 操作 * DataFrame 是一种以RDD为基础的分布式数据集,提供了详细的结构信息。 * DataFrame 支持多种数据源,包括 ...