<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一、概述 Hive 是將 SQL 轉為 MapReduce。 **SparkSQL 可以理解成是將 SQL 解析成:“RDD + 優化” 再執行** ![](https://img.kancloud.cn/7b/7b/7b7bb5b60fb5eef7de8238f40d04e1ba_1302x705.png) 在學習 Spark SQL 前,需要了解數據分類。 **數據分類** 數據分為如下幾類: | | 定義 | 特點 | 舉例 | | --- | --- | --- | --- | | 結構化數據 | 有固定的 Schema | 有預定義的 Schema | 關系型數據庫的表 | | 半結構化數據 | 沒有固定的 Schema,但是有結構 | 沒有固定的 Schema,有結構信息,數據一般是自描述的 | 指一些有結構的文件格式,例如 JSON | | 非結構化數據 | 沒有固定 Schema,也沒有結構 | 沒有固定 Schema,也沒有結構 | 指圖片 / 音頻之類的格式 | **總結:** * **RDD** 主要用于處理非結構化數據 、半結構化數據、結構化; * **Spark SQL** 是一個既支持 SQL 又支持命令式數據處理的工具; * **Spark SQL** 主要用于處理結構化數據 (較為規范的半結構化數據也可以處理)。 ### Spark SQL 數據抽象 #### DataFrame 和 DataSet Spark SQL 數據抽象可以分為兩類: **① DataFrame**:DataFrame 是一種以 RDD 為基礎的分布式數據集,類似于傳統數據庫的二維表格,帶有 Schema 元信息 (可以理解為數據庫的列名和類型)。DataFrame = RDD + 泛型 + SQL 的操作 + 優化 **② DataSet**:DataSet 是 DataFrame 的進一步發展,它比 RDD 保存了更多的描述信息,概念上等同于關系型數據庫中的二維表,它保存了類型信息,是強類型的,提供了編譯時類型檢查。調用 Dataset 的方法先會生成邏輯計劃,然后被 spark 的優化器進行優化,最終生成物理計劃,然后提交到集群中運行!DataFrame = Dateset\[Row\] `RDD`、`DataFrame`、`DataSet`的關系如下: ![](https://img.kancloud.cn/87/bb/87bb58d9fa30f84f3273783c6c44f63e_1470x526.png) * **RDD\[Person\]**:以 Person 為類型參數,但不了解其內部結構。 * **DataFrame**:提供了詳細的結構信息 schema 列的名稱和類型。這樣看起來就像一張表了。 * **DataSet\[Person\]**:不光有 schema 信息,還有類型信息。 #### 舉例 假設 RDD 中的兩行數據長這樣: ``` RDD[Person]: ``` ![](https://img.kancloud.cn/3c/69/3c690c4a0f438babb7b2b7c59eea068b_371x143.png) 那么 DataFrame 中的數據長這樣 ``` DataFrame = RDD[Person] - 泛型 + Schema + SQL 操作 + 優化 ``` ![](https://img.kancloud.cn/20/77/20778d4a7ac06c7fd076dd6f538271b6_715x212.png) 那么 Dataset 中的數據長這樣: ``` Dataset[Person] = DataFrame + 泛型: ``` ![](https://img.kancloud.cn/e2/05/e205da7a941aae8b3eb61b6cf8685984_779x198.png) Dataset 也可能長這樣: Dataset[Row]: ``` 即 DataFrame = DataSet[Row]: ``` ![](https://img.kancloud.cn/89/d9/89d9a887756ba67c95d3c24e33c18d09_354x202.png) **總結**: - DataFrame = RDD - 泛型 + Schema + SQL + 優化 - DataSet = DataFrame + 泛型 - DataSet = RDD + Schema + SQL + 優化 ## 二、SQLContext SparkSQL中所有相關功能的入口點是[SQLContext](http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.SQLContext)類或者它的子類, 創建一個SQLContext的所有需要僅僅是一個SparkContext。 ```scala val sc: SparkContext // An existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // createSchemaRDD is used to implicitly convert an RDD to a SchemaRDD. import sqlContext.createSchemaRDD ``` **除了一個基本的SQLContext,你也能夠創建一個HiveContext**,它支持基本SQLContext所支持功能的一個超集。它的額外的功能包括用更完整的HiveQL分析器寫查詢去訪問HiveUDFs的能力、從Hive表讀取數據的能力。用HiveContext你不需要一個已經存在的Hive開啟,SQLContext可用的數據源對HiveContext也可用。HiveContext分開打包是為了避免在Spark構建時包含了所有的Hive依賴。如果對你的應用程序來說,這些依賴不存在問題,Spark 1.2推薦使用HiveContext。以后的穩定版本將專注于為SQLContext提供與HiveContext等價的功能。 用來解析查詢語句的特定SQL變種語言可以通過`spark.sql.dialect`選項來選擇。這個參數可以通過兩種方式改變,一種方式是通過`setConf`方法設定,另一種方式是在SQL命令中通過`SET key=value`來設定。對于SQLContext,唯一可用的方言是“sql”,它是Spark SQL提供的一個簡單的SQL解析器。在HiveContext中,雖然也支持"sql",但默認的方言是“hiveql”。**這是因為HiveQL解析器更完整。在很多用例中推薦使用“hiveql”。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看