美文网首页大数据
SPARK 2.0 语句增强

SPARK 2.0 语句增强

作者: felix_feng | 来源:发表于2016-09-18 16:42 被阅读197次

    建立新的语法解析(SPARK-12362)满足所有的 SQL 语法,这样即合并 Hive 和标准 SQL 的语句解析,同时不依赖 Hive 的语法解析 jar(SPARK-14776)。之前版本二者的语法解析是独立的,这样导致在标准 SQL 中无法使用窗口函数或者 Hive 的语法,而在使用 Hive 语法时无法使用标准 SQL 的语法,比如 In/Exists 子句等。在 SQL 编写时,没法在一个 Context 把二者的范围全部支持,然而有了这个特性后,使得 SQL 语句表达更强大,后续要增加任何语法,只需要维护这一个语法解析即可。当然缺点是后续 Hive 版本的新语法,需要手动添加进来。

    支持 intersect/except(SPARK-12542)。如 select * from t1 except select * from t2 或者 select * from t1 intersect select * from t2。

    支持 uncorrelated scalar subquery(SPARK-13417)。如 select (select min(value) from testData where key = (select max(key) from testData) - 1)。

    支持 DDL/DML(SPARK-14118)。之前 DDL/DML 语句是调用 Hive 的 DDL/DML 语句命令来完成,而现在是直接在 Spark SQL 上就可以完成。

    支持 multi-insert(SPARK-13924)。

    支持 exist(SPARK-12545)和 NOT EXISTS(SPARK-10600),如 select * from (select 1 as a union all select 2 as a) t where exists (select * from (select 1 as b) t2 where b = a and b < 2)。

    支持 subqueries 带有 In/Not In 子句(SPARK-4226),如 select * from (select 1 as a union all select 2 as a) t where a in (select b as a from t2 where b < 2)。

    支持 select/where/having 中使用 subquery(SPARK-12543),如 select * from t where a = (select max(b) from t2) 或 select max(a) as ma from t having ma = (select max(b) from t2)。

    支持 LeftSemi/LeftAnti(SPARK-14853)。

    支持在条件表达式 In/Not In 里使用子句(SPARK-14781),如 select * from l where l.a in (select c from r) or l.a in (select c from r where l.b < r.d)。

    支持所有的 TPCDS 语句(SPARK-12540)。

    与以前版本兼容(SPARK-11806)

    不支持运行在 Hadoop 版本 < 2.2 上(SPARK-11807)。

    去掉 HTTPBroadcast(SPARK-12588)。

    去掉 HashShuffleManager(SPARK-14667)。

    去掉 Akka RPC。

    简化与完善 accumulators and task metrics(SPARK-14626)。

    将 Hive 语法解析以及语法移至 Core 里(SPARK-14825),在没有 Hive 元数据库和 Hive 依赖包时,我们可以像之前版本使用标准 SQL 一样去使用 HiveQL 语句。

    1.6 版本严重问题的解决

    在 http://geek.csdn.net/news/detail/70162 提到的 1.6 问题中 Spillable 集合内存溢出问题在 SPARK-4452 里已解决,BlockManager 死锁问题在 SPARK-12757 里已解决。

    最后 2.0 版本还有一些其他的特性,如:

    用 SparkSession 替换掉原来的 SQLContext and HiveContext。

    mllib 里的计算用 DataFrame-based API 代替以前的 RDD 计算逻辑。

    提供更多的 R 语言算法。

    默认使用 Scala 2.11 编译与运行。

    相关文章

      网友评论

        本文标题:SPARK 2.0 语句增强

        本文链接:https://www.haomeiwen.com/subject/tvhgettx.html