Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,而且做为分布式SQL查询引擎的做用。数据库
前边已经学习了Hive,它是将Hive SQL转换成MapReduce而后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,因为MapReduce这种计算模型执行效率比较慢,Spark SQL应运而生,它是将Spark SQL转换成RDD,而后提交到集群执行,执行效率很是快!编程
与RDD相似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据之外,还记录数据的结构信息,即schema。同时,与Hive相似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操做,比函数式的RDD API要更加友好,门槛更低。安全
1)是Dataframe API的一个扩展,是Spark最新的数据抽象。分布式
2)用户友好的API风格,既具备类型安全检查也具备Dataframe的查询优化特性。函数
3)Dataset支持编解码器,当须要访问非堆上的数据时能够避免反序列化整个对象,提升了效率。学习
4)样例类被用来在Dataset中定义数据的结构信息,样例类中每一个属性的名称直接映射到DataSet中的字段名称。优化
5) Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,因此能够经过as方法将Dataframe转换为Dataset。Row是一个类型,跟Car、Person这些的类型同样,全部的表结构信息我都用Row来表示。spa
6)DataSet是强类型的。好比能够有Dataset[Car],Dataset[Person].对象
7)DataFrame只是知道字段,可是不知道字段的类型,因此在执行这些操做的时候是没办法在编译的时候检查是否类型失败的,好比你能够对一个String进行减法操做,在执行的时候才报错,而DataSet不单单知道字段,并且知道字段类型,因此有更严格的错误检查。就跟JSON对象和类对象之间的类比。blog