Spark SQL概述html
做者:尹正杰sql
版权声明:原创做品,谢绝转载!不然将追究法律责任。数据库
一.什么是Spark SQLapache
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,而且做为分布式SQL查询引擎的做用。
Hive是将Hive SQL转换成MapReduce而后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性。
因为MapReduce这种计算模型执行效率比较慢。全部Spark SQL的应运而生,它是将Spark SQL转换成RDD,而后提交到集群执行,执行效率很是快!
舒适提示:
早期spark名称为"shark",故名意思,早期的spark版本主要以Hive SQL转换成RDD,但因为Hive是基于MapReduce模型研发的,而MapReduce的发展速度相对较慢这间接致使Hive的发展速度也缓慢。
因为Hive的发展速度较慢,因而Shark就模仿Hive的功能编写了本身的SQL,以后的版本都是基于自研的SQL来转换RDD,故shark改名为spark,固然如今的Spark版本也支持与Hive集成。
二.Spark SQL的特色编程
博主推荐阅读: http://spark.apache.org/sql/
三.什么是DataFrame安全
与RDD相似,DataFrame也是一个分布式数据容器。
然而DataFrame更像传统数据库的二维表格,除了数据之外,还记录数据的结构信息,即schema。
同时,与Hive相似,DataFrame也支持嵌套数据类型(struct、array和map)。
从API易用性的角度上看,DataFrame API提供的是一套高层的关系操做,比函数式的RDD API要更加友好,门槛更低。
上图直观地体现了DataFrame和RDD的区别。
左侧的RDD[Person]虽然以Person为类型参数,但Spark框架自己不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL能够清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。
DataFrame是为数据提供了Schema的视图。能够把它当作数据库中的一张表来对待,DataFrame也是懒执行的。性能上比RDD要高,主要缘由:优化的执行计划:查询计划经过Spark catalyst optimiser进行优化。
四.什么是DataSet框架
是Dataframe API的一个扩展,是Spark最新的数据抽象。 用户友好的API风格,既具备类型安全检查也具备Dataframe的查询优化特性。 Dataset支持编解码器,当须要访问非堆上的数据时能够避免反序列化整个对象,提升了效率。 样例类被用来在Dataset中定义数据的结构信息,样例类中每一个属性的名称直接映射到DataSet中的字段名称。 Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,因此能够经过as方法将Dataframe转换为Dataset。Row是一个类型,跟Car、Person这些的类型同样,全部的表结构信息我都用Row来表示。 DataSet是强类型的。好比能够有Dataset[Car],Dataset[Person]. DataFrame只是知道字段,可是不知道字段的类型,因此在执行这些操做的时候是没办法在编译的时候检查是否类型失败的,好比你能够对一个String进行减法操做,在执行的时候才报错,而DataSet不只仅知道字段,并且知道字段类型,因此有更严格的错误检查。就跟JSON对象和类对象之间的类比。
五.SparkSession新的起始点分布式
在老的版本中,SparkSQL提供两种SQL查询起始点:
SQLContext:
用于Spark本身提供的SQL查询。
HiveContext:
用于链接Hive的查询。
SparkSession是Spark最新的SQL查询起始点,实质上是SQLContext和HiveContext的组合,因此在SQLContext和HiveContext上可用的API在SparkSession上一样是可使用的。
SparkSession内部封装了sparkContext,因此计算其实是由sparkContext完成的。
六.博主推荐阅读函数
Spark SQL编程实战案例: https://www.cnblogs.com/yinzhengjie2020/p/13185272.html