1.SparkSQL概述
SparkSQL的前身是Shark
,它的底层依赖于Hive,因此其发展受制于Hive的发展,后来项目组将Shark废弃,保留了其中非常优秀的特点:比如内存存储技术
,动态字节码技术
等,重新组织了一个项目,这个项目就是SparkSQL,通过Spark去操作Hive,即Spark-on-Hive
,同时在hive里面也推出了一个子模块,是hive的计算引擎基于spark,即hive-on-spark
。
需要明确的是,sparkCore中的编程模型是RDD,在SparkSQL中的编程模型是DataFrame
,在spark1.6之后又做了进一步的升级Dataset
。
我们把RDD
称之为Spark的第一代编程模型,DataFrame
成为第二代编程,Dataset
则是第三代编程模型。
2.SparkSQL的特点
1) 可集成
混合SQL查询和spark程序
2)统一数据入口
连接任何数据源采用同样的方式
3) 整合Hive
基于已有的数据仓库,执行SQL或者HSQL查询
4)标准连接
提供了JDBC/ODBC的方式连接商业集成工具(如MySQL等)
3. 编程模型
正如上面所说到的,其编程模型是DataFrame
或者Dataset
,DataFrame就是一张二维表,相比较RDD多了一行额外的信息,即关系型数据库中的表头。而Dataset则集成了RDD与DataFrame两者的优点,包括RDD的强类型推断,以及非常大的lambda表达式和DataFrame的执行优化器。
4.SparkSQL编程的入口
Spark中编程的入口,就是各种各样的Context,在SparkSQL也不例外,Spark1.6以前,SparkSQL唯一的入口就是SQLContext,及其子类HiveContext,在Spark1.6之后,便又提供了一个SQLContext和HiveContext的集成者——SparkSession。此时SparkSession就成为了SparkSQL的入口,当然这些不管是SQLContext还是HiveContext还是SparkSession,其底层仍然依赖的是SparkContext。
需要额外添加的maven依赖:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.2</version>
</dependency>
5.SparkSession的创建
val spark=SparkSession.builder().master("local[*]").applName("SparkSQLOps").getOrCreate()