Spark SQL模块的编程主入口点是SparkSession,SparkSession对象不仅为用户提供了创建Dataframe对象、 读取外部数据源并转化为Dataframe对象以及执行sql查询的API, 还负责记录着用户希望Spark应用如何在Spark集群运行的控制、 调优参数, 是Spark SQL的上下文环境, 是运行的基础。
1、创建SparkSession会话 //创建sparkSession
val spark = SparkSession
.builder()
.appName("HiveSupport")
.master("local[*]")
.getOrCreate()
二、Dataframe
1、数据准备,json文件
项目处新建people.json文件
{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}
2、创建Dataframe
读取hdfs文件生成Dataframe。
val df = spark.read.json("input/people.json")
3、Dataframe基础操作
Dataframe为我们提供了灵活、 强大且底层自带优化的API, 例如select、 where、orderBy、 groupBy、 limit、 union这样的算子操作。
注意:使用Dataframe API时需要隐式转换:import spark.implicits._
下列例子是:name分组计算name的个数并按name增序排列展示出name,age+10,count(name)
//隐式转换
import spark.implicits._
df.select($"name",$"age" + 10).groupBy("name").count().orderBy(df("name").asc).show()
4、Dataframe注册成临时表以及查询临时表
将抽象的Dataframe注册成表,那样就可以像表那样使用和操作,更方便。
//df注册成临时表
df.createOrReplaceTempView("user")
//查询临时表
spark.sql("select * from user").show()
5、Dataframe注册成全局临时表以及查询全局临时表
注册成全局临时表有两种方式:createOrReplaceGlobalTempView和createGlobalTempView
区别在于第一是如果存在则会替换,第二个不会替换。
//df注册成全局临时表
df.createOrReplaceGlobalTempView("user")
//或者
df.createGlobalTempView("user")
//查询全局临时表
spark.sql("select * from global_temp.user").show()
6、临时表和全局临时表的区别
全局临时表( global temporary view) 于临时表( temporary view)是相对的, 全局临时表的作用范围是某个Spark应用程序内所有会话(SparkSession) , 它会持续存在, 在所有会话中共享, 直到该Spark应用程序终止。当然如果某个临时表只在整个应用中的某个session中需使用, 仅需注册为局部临时表, 避免不必要的在内存中存储全局临时表。
全局临时表与系统保留的数据库global_temp相关联, 引用时需用global_temp标识。临时表不需引用global_temp标识。
spark.sql("select * from global_temp.user").show()



