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,如下图所示: 生成未解析的逻辑计划 »

学习 Spark 2(七):去重计数

去重计数(count distinct)通常用于计算集合中不重复元素的个数。例如:统计交易的商品数、网站的 UV 等。 HyperLogLog 一般情况下,去重计数的做法是维护元素集合 S,对于一个新的元素 e,如果 S 中包含元素 e 则加入集合 S,否则不加入,集合 S 的元素数量就是计数值。 然而, »