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)
- Spark入门——5 SparkSQL
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- Spark入门之六:SparkSQL实战
- SparkSQL(Spark-1.4.0)实战系列(三)——SparkSQL应用案例
- spark-sparkSQL
- Spark-SparkSql
- Spark入门之五:SparkSQL的原理以及架构
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
- 父亲节就快到了,为老爸接力一下好吗?
- HDU-1049-Climbing Worm(C++ && 编程初学者的题......)
- JSON 字符串 与 java 对象的转换
- Android学习 6->浅谈界面显示与LayoutInflater
- Build HSS and Config Phpmyadmin
- Spark入门——5 SparkSQL
- 九度OJ-题目1509:树中两个结点的最低公共祖先
- 关于C++多重继承的时候虚函数覆盖的问题
- 我为什么从 Python 转向 Go?
- OPENCV笔记(一)图像显示
- 程序员的量化交易(34)--QuantConnect_Lean如何定义Indicator指标2
- 一个架构师谈什么是架构以及怎么成为一个架构师
- iOS开发学习笔记(一)——Hello,World!
- js性能优化