2015-11-12 72 views
37

Apache Spark SQLContext和HiveContext有什麼區別?Apache Spark SQLContext與HiveContext有什麼區別?

有些消息來源表示,由於HiveContext是SQLContext的超集,因此開發人員應始終使用HiveContext,它具有比SQLContext更多的功能。但是,每個上下文的當前API大部分是相同的。

  • SQLContext/HiveContext更有用的場景是什麼?
  • 只有使用Hive時,HiveContext才更有用嗎?
  • 或者SQLContext是使用Apache Spark實現大數據應用程序所需要的嗎?

回答

29

星火2.0+

星火2.0提供原生窗口功能(SPARK-8641)和功能在分析一些附加的改進和更好的SQL 2003遵守所以它是顯著較少依賴於蜂巢實現核心的funcionality與因爲HiveContextSparkSession Hive支持)似乎沒有那麼重要。

星火< 2.0

顯然,如果你想與蜂巢工作,你必須使用HiveContext。除此之外,與目前最大的區別(Spark 1.5)是對window functions的支持以及訪問Hive UDF的能力。

一般來說,窗口函數是一個非常酷的功能,可用於以簡潔的方式解決相當複雜的問題,而無需在RDD和DataFrame之間來回切換。性能仍然遠遠沒有達到最佳,尤其是沒有PARTITION BY條款,但它確實沒有Spark特定的。

關於Hive UDF現在不是一個嚴重的問題,但在Spark 1.5之前已經使用Hive UDF表示了許多SQL函數,並且需要HiveContext才能工作。

HiveContext還提供了更健壯的SQL解析器。請參閱:py4j.protocol.Py4JJavaError when selecting nested column in dataframe using select statetment

最後需要HiveContext啓動Thrift服務器。

HiveContext最大的問題是它帶有很大的依賴關係。

+0

使用您的評論,似乎HiveContext唯一的缺點是它的依賴性很大。除此之外,總是使用HiveContext而不是SqlContext是安全的。我正在運行SparkR 1.6環境。 –

+0

來自https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-SparkSession.html「SparkSession已經在Spark 2.0中的一個對象中合併了SQLContext和HiveContext。」 –

3

當針對Spark SQL進行編程時,我們有兩個入口點,取決於 是否需要Hive支持。建議的入口點是HiveContext,以 提供對HiveQL和其他Hive相關功能的訪問。更基本的 SQLContext提供了不依賴於 Hive的Spark SQL支持的子集。

- 對於可能與包含Hive依賴關係的所有 相沖突的用戶存在分隔。

- 在SQLContext中找不到的HiveContext的其他功能包括使用更完整的HiveQL分析器編寫查詢,訪問Hive UDF以及從Hive表讀取數據的能力。

- 使用HiveContext不需要現有的Hive安裝程序。

+0

進一步閱讀請參閱https://spark.apache.org/docs/1.6.1/sql-programming-guide.html – BigDataScholar

+0

即使sql上下文不需要配置單元安裝 – anubhav

3

HiveContext仍然sqlcontext的超集,它包含了某些額外的屬性,例如它可以讀取從蜂房site.xml的配置,如果你有蜂巢使用,否則根本sqlcontext

相關問題