Spark SQL

Spark SQL 的格式與資料查詢的運用

SPARK SQL 操作

Spark SQL 並不是將 Spark 作為一個 SQL server 使用,而是指 Spark 的一種資料型態。考慮到 Spark 內的資料是以 RDD 為架構,因此,很適合當作一個資料庫的單元 (例如: table) 來進行操作。同時,由於 RDD 的封閉性 (唯讀) 以及資料的多樣態 (key-value) ,也很適合使用 SQL 指令進行 RDD 資料的操作。

首先,我們先進入 Spark shell,並 import 必要的檔案:

Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.1.0
      /_/

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_191)
Type in expressions to have them evaluated.
Type :help for more information.

scala> import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SparkSession

scala> import spark.implicits._
import spark.implicits._

接著,我們引入一個 json 格式的檔案,作為輸入 RDD 的資料,該檔案內容如下:

在該檔案中,我們可以看到,對每一個 json 字串,都帶有兩個欄位: name 以及 age。接著,我們把該 json 檔案讀入 Spark 中。由於我們必沒有宣告欄位中數值的型態,Spark 將會透過隱式 (implicits) 轉換,賦予其資料型態。

df 就是透過 json 轉換出來的 RDD,我們可以利用df.show()來看其中內容。其資料結構會顯示像是 SQL 表格的形式。

不只是資料格式為 SQL 的表格,我們也可以透過一些類 SQL 指令對 RDD 進行操作,例如,列出 age > 29 的數值,或是只顯示某一些欄位。

考慮到 json 格式的巢狀結構,我們也可以試著引入一個比較複雜的資料結構,如下所示:

這樣巢狀結構的資料,也可以引入 Spark SQL 中,會是欄位中的多重數值。

更多關於 Spark SQL 的資訊,可以參考官方網站:

Note: SQL 指令紀錄

登入 mySQL,並切換到 spark 資料庫。

創建 table

刪除 table

查看目前的 table

同時插入 table 多筆數值:

將寫好 SQL 指令的文字檔直接執行:

讀取 table 的內容:

計算 table 內某一欄位的有值數目:

Last updated

Was this helpful?