SparkSQL是Spark生态栈中处理结构化数据的一个模块。
特点:
- 可集成
- 统一数据入口
- 整合Hive
- 标准连接
SparkSession的创建和初始化
Spark中编程的入口,就是各种各样的Context,在SparkSQL也不例外,Spark1.6以前,SparkSQL唯一的入口就是SQLContext,及其子类HiveContext,在Spark1.6之后,便又提供了一个SQLContext和HiveContext的集成者——SparkSession。此时SparkSession就成为了SparkSQL的入口,当然这些不管是SQLContext还是HiveContext还是SparkSession,其底层仍然依赖的是SparkContext。
添加依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.2.2</version>
</dependency>
SparkSession的构建
2.2.2.编程
/**
* SparkSQL编程初体验
* SparkSQL解决了问题?
* 在Spark生态栈中,专门用于处理结构化数据的。
* 入口:SparkSession
* 编程模型:DataFrame或者Dataset
*/
object _01SparkSQLOps {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()//构建一个SparkSession
.master("local[*]")
.appName("SparkSQLOps")
.getOrCreate()
//早期的SQLContext和HiveContext的构建
// val sqlContext = new SQLContext(sparkContext)
// val hiveContext = new HiveContext(sparkContext)
//加载外部文件
val pdf:DataFrame = spark.read.json("file:///E:/data/spark/sql/people.json")
println("----------------schema约束信息-----------")
//元数据信息-约束信息,DataFrame其实在早期叫做SchemaRDD
//pdf.schema//StructType--->是对应于整张表而言,
具体的schema信息是StructFile---->是对应与一张表中的某一个字段/列(列名,类型,是否为null)
pdf.printSchema()
println("---------------表的内容-----------------")
pdf.show()//查看当前DataFrame二维表中的数据 select * fr