SparkSession、SparkContext、SQLContext和HiveContext之間的區別。


SparkContext 是什么?

  1. 驅動程序使用SparkContext與集群進行連接和通信,它可以幫助執行Spark任務,並與資源管理器(如YARN 或Mesos)進行協調。
  2. 使用SparkContext,可以訪問其他上下文,比如SQLContext和HiveContext。
  3. 使用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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM