版本變化
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 |