SparkSession为用户提供了一个相对统一的切入点来使用Spark的各项功能(流除外),而不需要显式地创建SparkConf、SparkContext、SQLContext和HiveContext了,因为这些对象已经被封装在了SparkSession中。
Spark2.0中引入了SparkSession的概念,它为用户提供了一个统一的切入点来使用Spark的各项功能,用户不但可以使用DataFrame和Dataset的各种API,学习Spark2的难度也会大大降低。
本文就SparkSession在Spark22.0中的功能和地位加以阐释。
SparkSession的功能
首先,我们从一个Spark应用案例入手:SparkSessionZipsExample可以从JSON文件中读取邮政编码,通过DataFrame API进行分析,同时还能够使用Spark SQL语句实施查询。
创建SparkSession
在2.0版本之前,使用Spark必须先创建SparkConf和SparkContext,代码如下:
//set up the spark configuration and create contexts
val sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local")
// your handle to SparkContext to access other context like SQLContext
val sc = new SparkContext(sparkConf).set("spark.some.config.option", "some-value")
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
不过在Spark2.0中只要创建一个SparkSession就够了,SparkConf、SparkContext和SQLContext都已经被封装在SparkSession当中。下面的代码创建了一个SparkSession对象并设置了一些参数。这里使用了生成器模式,只有此“spark”对象不存在时才会创建一个新对象。
// Create a SparkSession. No need to create SparkContext
// You automatically get it as part of the SparkSession
val warehouseLocation = "file:${system:user.dir}/spark-warehouse"
val spark = SparkSession
.builder()
.appName("SparkSessionZipsExample")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
执行完上面的代码就可以使用spark对象了。