一、Spark SQL是什么?
1、Spark SQL是Spark套件中的一个模块,它将数据的计算任务通过SQL的形式转换成了RDD的计
算,类似于Hive通过SQL的形式将数据的计算任务转换成了MapReduce。
2、Spark SQL的特点:
(1) 和Spark Core的无缝集成,我可以在写整个RDD应用的时候,配置Spark SQL来实现我的逻辑
(2) 统一的数据访问方式,Spark SQL提供标准化的SQL查询。
(3) Hive的继承,Spark SQL通过内嵌Hive或者连接外部已经配置好的hive实例,实现了对Hive语法
的继承和操作。
(4) 标准化的连接方式,Spark SQL可以通过启动thrift Server来支持JDBC、ODBC的访问,将自己作
为一个BI Server使用。
Spark SQL 数据抽象
从整个直观层面上看,RDD抽象实在Spark1.0时引入的,Dataframe抽象是在Spark1.3的时候引入
的,Dataset抽象是在Spark1.6的时候引入的。
二、Dataframe是什么?
RDD + Schema 一张表
DataFrame也是懒执行的、不可变的,性能上比RDD要高
Dataframe的劣势在于在编译期缺少类型安全检查,运行期检查
三、Dataset是什么?
1、Dataframe API的一个扩展
2、Spark最新的数据抽象
3、具有类型安全检查
4、具有Dataframe的查询优化特性
5、Dataset支持编解码器
6、样例类的使用
DataFrame=Dataset[Row]
7、DataSet是强类型的
DataFrame只是知道字段,但是不知道字段的类型,所以在执行这些操作的时候是没办法在编译的
时候检查是否类型失败的,比如你可以对一个String进行减法操作,在执行的时候才报错,而
DataSet不仅仅知道字段,而且知道字段类型,所以有更严格的错误检查。
四、RDD、DataFrame、DataSet有什么关系呢?
总结:
Spark SQL
1、Spark SQL是Spark套件中的一个模块,它将数据的计算任务通过SQL的形式转换成了RDD的计
算,类似于Hive通过SQL的形式将数据的计算任务转换成了MapReduce。
2、Spark SQL的特点:
(1) 和Spark Core的无缝集成,我可以在写整个RDD应用的时候,配置Spark SQL来实现我的逻辑
(2) 统一的数据访问方式,Spark SQL提供标准化的SQL查询。
(3) Hive的继承,Spark SQL通过内嵌Hive或者连接外部已经配置好的hive实例,实现了对Hive语法
的继承和操作。
(4) 标准化的连接方式,Spark SQL可以通过启动thrift Server来支持JDBC、ODBC的访问,将自己作
为一个BI Server使用。
Spark SQL数据抽象
1、RDD(Spark1.0)->DataFrame(Saprk1.3)->DataSet(Spark1.6)
2、Spark SQL提供了DataFrame和DataSet的数据抽象。
3、DataFrame就是RDD + Schema,可以认为是一张二维表格。它的劣势是在编译期不进行表格中
的字段的类型检查,在运行期检查。
4、DataSet是Spark最新的数据抽象,Spark的发展会逐步将DataSet作为主要的数据抽象,强化RDD
和DataFrame。DataSet包含了DataFrame所有的优化机制。除此之外提供了以样例类为Schema模
型的强类型。
5、DataFrame = DataSet[Row]
6、DataFrame和DataSet都有可控的内存管理机制,所有数据都保存在非堆上,都使用了catalyst进
行SQL的优化。
三者的共性
1、RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便
利。
2、三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action 如
foreach时,三者才会开始遍历运算,极端情况下,如果代码里面有创建、转换,但是后面没有在
Action中使用对应的结果,在执行时会被直接跳过。
val sparkConf = new
SparkConf().setMaster("local").setAppName("test").set("spark.port.maxRetries","1000")