1.SqlContext
SQLContext依賴SparkContext
功能:支持SparkSQL操作(不依賴Hive)
SQLContext在一個JVM中默認允許存在多個
只有SQLContext支持序列化與反序列化。
2.HiveContext
繼承了SQLContext
HiveContext是SparkSQL讀取Hive表數據的入口
繼承自SQLContext,重寫了一些方法。
發現sqlContext的類型是HiveContext,所以以前的示例可以直接進行操作hive。
3.SparkSQL
SparkCore
入口:SparkContext
核心抽象:RDD
SparkSQL
入口:SQLContext
核心抽象:DataFrame
4.SparkSQL底層優化
兩張表進行join: 對於表數據小於參數spark.sql.autoBroadcastJoinThreshold(10485760)設置值的時候,將數據廣播變量
5.補充
rdd.foreachPartition(iter => {
// 如果在這里創建一個SQLContext的話,相當於每個分區都創建一個SQLContext===>可能導致OOM異常(Perm Space)
// 解決方案:直接在driver中創建一個SQLContext對象,然后直接在各個分區中使用 --> SQLContext支持序列化
})