SparkContext 是什么?
- 驅動程序使用SparkContext與集群進行連接和通信,它可以幫助執行Spark任務,並與資源管理器(如YARN 或Mesos)進行協調。
- 使用SparkContext,可以訪問其他上下文,比如SQLContext和HiveContext。
- 使用SparkContext,我們可以為Spark作業設置配置參數。
如果您在spark-shell中,那么SparkContext已經為您提供了,並被分配給變量sc。
如果還沒有SparkContext,可以先創建一個SparkConf。
//set up the spark configuration
val sparkConf = new SparkConf().setAppName("hirw").setMaster("yarn")
//get SparkContext using the SparkConf
val sc = new SparkContext(sparkConf)
SQLContext 是什么?
SQLContext是通往SparkSQL的入口。下面是如何使用SparkContext創建SQLContext。
// sc is an existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
一旦有了SQLContext,就可以開始處理DataFrame、DataSet等。
HiveContext 是什么?
HiveContext是通往hive入口。
HiveContext具有SQLContext的所有功能。
實際上,如果查看API文檔,就會發現HiveContext擴展了SQLContext,這意味着它支持SQLContext支持的功能以及更多(Hive特定的功能)
public class HiveContext extends SQLContext implements Logging
下面是如何使用SparkContext獲得HiveContext
// sc is an existing SparkContext.
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
SparkSession 是什么?
SparkSession是在Spark 2.0中引入的,
它使開發人員可以輕松地使用它,這樣我們就不用擔心不同的上下文,
並簡化了對不同上下文的訪問。通過訪問SparkSession,我們可以自動訪問SparkContext。
下面是如何創建一個SparkSession
val spark = SparkSession
.builder()
.appName("hirw-test")
.config("spark.some.config.option", "some-value")
.getOrCreate()
SparkSession現在是Spark的新入口點,它替換了舊的SQLContext和HiveContext。注意,保留舊的SQLContext和HiveContext是為了向后兼容。
一旦我們訪問了SparkSession,我們就可以開始使用DataFrame和Dataset了。
下面是我們如何使用Hive支持創建SparkSession。
val spark = SparkSession
.builder()
.appName("hirw-hive-test")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
因此,如果您正在使用Spark 2.0或更高版本,建議使用SparkSession。