Spark SQL 源码分析(四):SessionCatalog

SessionCatalog 是底层元数据(基于内存和基于 Hive)的代理,同时也负责临时视图和函数的管理。 SessionCatalog 类图: ExternalCatalog ExternalCatalog 用于管理数据库、表、分区和函数,在 Spark SQL 中具体有两个实现: InMemoryCatalog HiveExternalCatalog InMemoryCatalog 是 ExternalCatalog 基于内存(内部使用 scala.collection. »

Spark SQL 源码分析(三):SqlParser

SQL on Hadoop 按 SQL 解析可分为两大阵营: ANTLR Apache Calcite ANTLR 阵营的包括:Apache Hive、Apache Spark、Presto。Apache Calcite 阵营的包括:Apache Flink、Apache Kylin。 下面以 SparkSession 的 »

学习 Spark 2(八):集成 Drools

在日常开发过程中,偶尔会遇到业务逻辑变更频繁且变更较小的情况,每次业务逻辑变更都需要经历一次上线的过程,效率非常低下。 解决问题的一个思路,是将这部分经常变化的业务逻辑抽象出来,存储在应用外部(文件系统或者数据库),在程序运行的时候动态加载。 Drools 是基于 Java 的规则引擎,可以使用规则实现复杂的逻辑处理,也可以动态加载规则实现逻辑的动态加载。 下面,以根据商品日均销售额判断商品级别为例,演示: 依赖 编辑 pom.xml 文件,添加 Drools 依赖: »

Spark SQL 源码分析(二):SparkSession

SparkSession Spark 2.0 之后,提供了 SparkSession 新的程序入口,替代了之前的 SqlContext 和 HiveContext,执行 SQL 和创建 DataFrame/Dataset。 SparkSession.builder() .appName("demo") .master("yarn") .enableHiveSupport() .getOrCreate() SparkSession »

Spark SQL 源码分析(一):从 SQL 到 RDD

之前,曾经和同事讨论过一个问题:实现相同的逻辑,使用 RDD 一定比 SQL 执行速度更快么? 我的答案是:不一定。 至少在 Spark 2.0 之后,SQL 的执行速度是有可能比 RDD 更快的。 原因,是因为 SQL 最终生成的是经过优化的 RDD,如下图所示: 生成未解析的逻辑计划 »