版本变化
spark1.x
在Spark1.6中使用的为Hive on spark,主要是依赖hive生成spark程序,有两个核心组件SQLcontext和HiveContext。
// 创建SparkConf
val sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local")
// 使用SparkConf创建SparkContext
val sc = new SparkContext(sparkConf).set("spark.some.config.option", "some-value")
// 使用SparkContext创建SQLContext
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
spark2.x
而Spark2.0中使用的就是SparkSQL,是后继的全新产品,解除了对Hive的依赖。
从Spark2.0以上的版本开始,spark是使用全新的SparkSession接口代替Spark1.6中的SQLcontext和HiveContext来实现对数据的ETL等工作,并且实现了SQLcontext和HiveContext的所有功能。
在新版本中并不需要之前那么繁琐的创建很多对象,只需要创建一个SparkSession对象即可。
SparkSession支持从不同的数据源加载数据,并把数据转换成DataFrame,并支持把DataFrame转换成SQLContext自身中的表。
然后使用SQL语句来操作数据,也提供了HiveQL以及其他依赖于Hive的功能支持。
与SparkContext的区别和联系
区别
- SparkContext是基于RDD编程的,主要通过如下方法生成RDD
- textFile
- hadoopFile
- parallelize
- objectFile
- sequenceFile
- binaryFile
- SparkSession主要通过DataFrame和Dataset进行编程
- SparkSession可以通过read方法调用DataFrameReader类中定义的外部数据源读取方法,也可以自定义其他外部数据源的读取。
- 通过createDataFrame方法,将RDD转化为Row对象,关联上StructType,可以将RDD转化为DataFrame
联系
- SparkSession由SparkContext创建,即SC为SS的类成员属性,因此SparkSession包含SparkContext的功能
SparkSession的作用
功能简述
public方法 | 功能 |
---|---|
createDataFrame | 将rdd或者list转化为dataframe |
read | 提供多种外部数据源格式的读取 |
udf | |
sql | |
baseRelationToDataFrame | |
createDataset | |
experimental | |
listenerManager | |
newSession | |
range | |
readStream | |
streams | |
teble | |
time | |
version |
成员属性简述
public属性 | 类型 | 功能 |
---|---|---|
sparkContext | SparkContext | |
sharedState | SharedState | lazy |
sessionState | SessionState | lazy |
sqlContext | SQLContext | |
conf | RuntimeConfig | lazy |
emptyDataFrame | DataFrame | lazy |
catalog | Catalog | lazy |