第9章 Spark SQL
三大功能: 1)可以從各種結構化資料來源(JSON、Hive、Parquet)中讀取資料 2)支援在Spark程式內使用SQL語句進行資料查詢,也支援通過標準資料庫聯結器(JDBC/ODBC)連線Spark SQL進行查詢 3)支援SQL與常規程式碼高度整合,包括連線RDD與SQL表、公開的自定義SQL函式介面
Spark SQL提供的SchemaRDD,存放Row物件的RDD,包含記錄的結構資訊,可以執行SQL查詢
9.1 連線Spark SQL Spark SQL可以包含Hive支援,也可以不包含 引入依賴,支援Hive:spark-hive-版本,不支援Hive:spark-sql-版本 Spark SQL程式設計入口,支援Hive:HiveContext,不支援Hive:SQLContext 把Spark SQL連線到一個部署好的Hive上。
9.2 在運用中使用Spark SQL
基於已有的SparkContext創建出一個HiveContext,使用HiveContext創建出表示結構化資料的SchemaRDD,並且使用SQL或是類似map()的普通RDD操作來操作這些SchemaRDD。
9.2.1 初始化Spark SQL
hiveCtx = HiveContext(sc)
9.2.2 基本查詢示例
要在一張資料表上進行查詢,需要呼叫HiveContext或者SQLContext中的sql()方法。
9.2.3 SchemaRDD 讀取資料或執行查詢都會返回SchemaRDD。與表概念類似。 可以把任意SchemaRDD註冊為臨時表,這樣就可以使用HiveContext.sql來對它進行查詢了。
使用Row物件 Row物件表示SchemaRDD中的記錄,其本質就是一個定長的欄位陣列。
9.2.4 快取
使用專門的hiveCtx.cacheTable(“tableName”)進行快取。 也可以使用HiveQL和SQL語句來快取表,只需要執行CACHE TABLE tableName 和 UNCACHE TABLE tableName來快取表或者刪除已有的快取即可。
9.3 讀取和儲存資料
9.3.1 Apache Hive
9.3.2 Parquet 流行的列式儲存格式。 通過HiveContext.parquestFile來讀取資料。 使用saveAsParquestFile()把SchemaRDD的內容以Parquest格式儲存。
9.3.3 JSON
9.3.4 基於RDD
9.4 JDBC/ODBC伺服器
9.5 使用者自定義函式
9.6 Spark SQL效能
9.7 總結