使用 Spark SQL 處理資料

已完成

Dataframe API 是名為 Spark SQL 的 Spark 程式庫的一部分,可讓資料分析師使用 SQL 運算式來查詢及操作資料。

在 Spark 目錄中建立資料庫物件

Spark 目錄是關聯式資料物件 (例如檢視和資料表) 的中繼存放區。 Spark 執行階段可以使用目錄,順暢整合以任何 Spark 支援的語言撰寫的程式碼,以及對某些資料分析師或開發人員而言可能更自然的 SQL 運算式。

若要讓資料框架中的資料可在 Spark 目錄中查詢,其中一個最簡單方式就是建立暫存檢視,如下列程式碼範例所示:

df.createOrReplaceTempView("products_view")

檢視是暫時性的,這表示它會自動在目前工作階段結束時刪除。 您也可以建立保存於目錄中的資料表,用於定義可使用 Spark SQL 查詢的資料庫。

資料表是中繼資料結構,會將其基礎資料儲存在與目錄相關聯的儲存位置。 在 Microsoft Fabric 中,用於受控資料表的資料會儲存在資料湖中顯示的 [資料表] 儲存位置,而使用 Spark 建立的任何資料表會列在那裡。

您可以使用 spark.catalog.createTable 方法建立空的資料表,或使用其 saveAsTable 方法將資料框架儲存為資料表。 刪除受控資料表也會刪除其基礎資料。

例如,下列程式碼會將資料框架儲存為名為 products 的新資料表:

df.write.format("delta").saveAsTable("products")

注意

Spark 目錄支援以各種格式的檔案為基礎的資料表。 Microsoft Fabric 中慣用的格式為 Delta,這是名為 Delta Lake 之 Spark 上關聯式資料技術的格式。 Delta 資料表可支援關聯式資料庫系統中常見的功能,包括異動、版本設定,以及串流資料的支援。

此外,您還可以使用 spark.catalog.createExternalTable 方法來建立外部資料表。 外部資料表會定義目錄中的中繼資料,但會從外部儲存位置取得其基礎資料;通常是資料湖的 [檔案] 儲存位置中的資料夾。 刪除外部資料表並不會刪除基礎資料。

提示

您可以將相同的資料分割技術套用至 Delta Lake 資料表,如上一個單元中針對 parquet 檔案所討論的方式。 資料分割資料表在查詢時,可產生較佳的效能。

使用 Spark SQL API 查詢資料

在以任何語言撰寫的程式碼中,都能使用 Spark SQL API 來查詢目錄中的資料。 例如,下列 PySpark 程式碼使用 SQL 查詢,以資料框架的形式從 products 資料表傳回資料。

bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
                      FROM products \
                      WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)

此範例程式碼的結果可能看起來類似下表:

ProductID ProductName ListPrice
771 Mountain-100 Silver, 38 3399.9900
839 Road-750 Black, 52 539.9900
... ... ...

使用 SQL 程式碼

上述範例示範如何使用 Spark SQL API 在 Spark 程式碼中內嵌 SQL 運算式。 在筆記本中,您也可以使用 %%sql magic 來執行 SQL 程式碼,以查詢目錄中的物件,如下所示:

%%sql

SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category

SQL 程式碼範例傳回的結果集會自動在筆記本中顯示為資料表:

類別 ProductCount
Bib-Shorts 3
Bike Racks 1
Bike Stands 1
... ...