SparkSQL與Hive的應用關係

  1. Spark生態圈
    Spark是基於scala語言產生的,因此有關spark中的各大編程應用也基本跟scala脫不開關係,但是好在spark的平臺化做的不錯,目前可支持python及R等語言的應用,這些得益於sparkSQL組件的存在,整個spark的結構組件如下如所示:
    這裏寫圖片描述
    關於spark的組件功能描述不多說,可以參考博客spark入門系列及 官方資料等,保證有個初步的印象。

  2. SparkSQL在Hive中的應用
    目前關於sparksql應用的中文文檔並不多見,有興趣的想深入瞭解的可以參考官方編程指導,裏面涵蓋了有關scala,java,python及R的語法規則及應用案例,這裏簡單的就pyspark交互式編程命令說說如何使用hive中的表。

    Spark SQL提供了一種抽象的編程工具DataFrame框架,它是分佈式sql查詢的基本引擎,不論採用何種編程語言最終都是實現對DataFrame的操作。DataFrame的構建數據源可以來自於結構化的數據文件,hive數據表,外部數據庫及存在的RDDs數據集。

    現在假設Spark環境已經安裝好,調用spark安裝包下的bin/pyspark腳本命令可啓動交互式編程環境,如下圖所示:
    這裏寫圖片描述

    由於pyspark是基於spark環境的,故首先建立起關於sql的環境,輸入命令,其中sc參數是啓動後系統自建的sparkcontext環境,不需要用戶自己建立,只需導入python中的SQLContent類即可應用,這樣可以利用sql實現對DataFrame的查詢應用等。

>from pyspark.sql import SQLContext
>sqlContext = SQLContext(sc)

雖然目前SQLContext已經向下兼容了HiveContext環境,不過對要使用hive數據倉庫數據的用戶來說需要使用HiveContext,基本命令跟上面基本類似:

>from pyspark.sql import HiveContext
>sqlContext = HiveContext(sc)

之後用戶可以使用sqlContext.sql(“select * from table”)命令完成對hive數據的查詢應用,相比於mapreduce下的查詢效率確實快了上十倍了。

下面將列出pyspark環境下使用python API實現的對hive的一系列連貫操作,
第一步,選擇數據庫

sqlContext.sql(“use database”)

第二步,創建數據表

sqlContext.sql(“CREATE TABLE IF NOT EXISTS src (key INT, value STRING)”)

第三步,導入數據集

sqlContext.sql(“LOAD DATA LOCAL INPATH ‘examples/src/main/resources/kv1.txt’ INTO TABLE src”)

第四步,查詢數據集,產生DataFrame

results = sqlContext.sql(“FROM src SELECT key, value”)

若要產生RDDs,則可使用命令results.collect(),之後就可採用針對DataFrame的各種應用變化,當結束應用後,可將讀入保存的命令保存到本hdfs環境中

df = sqlContext.read.load(“examples/src/main/resources/people.json”, format=”json”)
df.select(“name”, “age”).write.save(“namesAndAges.parquet”, format=”parquet”)

PS:若要實現對DataFrame的sql查詢,可以採用如下轉化命令,之後將people視同hive表進行sql查詢。

results.registerTempTable(“people”)

注意:若使用HiveContext讀取hive表的數據,然後使用registerTempTable()後的表名只能通過HiveContext.sql查詢,若使用sqlContext查詢將會報錯找不到表名people

另:附上兩篇學習pyspark的官方指導翻譯篇:
Spark編程指南(Python版)
spark機器學習庫指南[Spark 1.3.1版]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章