Spark入门——5 SparkSQL

来源:互联网 发布:2016年4月1日非农数据 编辑:程序博客网 时间:2024/06/18 16:36

        SparkSQL是在Spark1.0版本才加入的,shark已经不会再被投入资源来更新,而SparkSQL利用了Shark中最好的部分(例如:列式存储,等等)。SparkSQL除了致力于覆盖Shark所有功能之外还提供了SQL DSL API和灵活的程序扩展。SparkSQL的内部核心模块是Catalyst。

       SparkSQL的逻辑架构图如下所示:


      

          如上图所示:SQL引擎包含四个步骤:解析(parse),绑定(bind),优化(optimization),执行(excutor)。

         1,解析阶段:

          sparksql有两个语法解析器:基于hive的和sparkSQL自己的。但是无能哪个语法解析器,catalyst都能

通过自己完备的逻辑计划操作算子,将其映射成逻辑计划树。However,sparksSQL的DSL API 可以直接构造

逻辑计划树。

        2,绑定元数据和语义分析阶段:

        本阶段主要加入数据表中的元数据信息,获取数据表对应的列及其数据类型。catalyst也是基于Plugin实现管理源数据的

        3,优化(逻辑计划优化阶段):

        catalyst使用自己的规则集,对逻辑计划树进行优化(以Rule的方式针对各种优化条件进行映射)

       4,执行阶段(物理计划生成阶段):

        基于规则,选取不同的物理执行算子,把优化后的逻辑计划编程物理计划。最终提交执行引擎运行。


       SqlContext

       SqlContext是Catalyst的内置SQL扩展的基类实现,提供了解析,绑定,执行(生成基于RDD的物理计划),三个扩展。

      HiveContext

      将解析,绑定,生成基于RDD的物理计划算子串联起来。

      1,HIveParse/Hive AST,将解析出的抽象语法树映射成Catalyst中定义的逻辑计划树

      2,Hive Catalog ,存放数据库和表的元数据信息,hive中称MetaStore

      3,HIve&Spark Planner,针对已优化过的逻辑计划,生成物理计划


      DSL API分为两类:Context提供与数据源管理相关的API;SchemaRDD提供与SQL语言对应的DSL API

      DSL API示例:

      1>rdd1.select('a  ' b+'c, 'd as 'aliasedName)--列选取

      2>rdd1.where('a 'b>10)--条件筛选

      3>rdd1.join(rdd2,Inner,'x.a==='y.a)--表连接

      4>rdd1.orderBy('x.asc,'y.desc)--排序

      5>groupBy('item)(Sum('num) as 'numb)--分组聚合

      6>取别名

      7>RDD3.unionAll(rdd4)


      

        

      


0 0
原创粉丝点击