(1) 什么是SparkSQL?

spark SQL是spark的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象就是DataFrame。

(2)SparkSQL的作用

提供一个编程抽象(DataFrame) 并且作为分布式 SQL 查询引擎

DataFrame:它可以根据很多源进行构建,包括:结构化的数据文件,hive中的表,外部的关系型数据库,以及RDD

(3)运行原理

将 Spark SQL 转化为 RDD, 然后提交到集群执行

(4)DataFrames   

 

在SparkSQL中Spark为我们提供了两个新的抽象,分别是DataFrame和DataSet。他们和RDD有什么区别呢?首先从版本的产生上来看:
RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6)

RDD

RDD是一个懒执行的不可变的可以支持Lambda表达式的并行数据集合。

RDD的最大好处就是简单,API的人性化程度很高。

RDD的劣势是性能限制,它是一个JVM驻内存对象,这也就决定了存在GC的限制和数据增加时Java序列化成本的升高。

Dataframe

第1关:SparkSQL初识 spark-sql -d_SQL

与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。

同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。

从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。

性能上比RDD要高,主要有两方面原因:定制化内存管理, 优化的执行计划

Dataset

是Dataframe API的一个扩展,是Spark最新的数据抽象

用户友好的API风格,既具有类型安全检查也具有Dataframe的查询优化特性。

Dataset支持编解码器,当需要访问非堆上的数据时可以避免反序列化整个对象,提高了效率。

样例类被用来在Dataset中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中的字段名称

Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,所以可以通过as方法将Dataframe转换为Dataset。

DataSet是强类型的。比如可以有Dataset[Car],Dataset[Person].

第1关:SparkSQL初识 spark-sql -d_API_02