使用 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
方法來建立外部資料表。 外部資料表會定義目錄中的中繼資料,但會從外部儲存位置取得其基礎資料;通常是資料湖的 [檔案] 儲存位置中的資料夾。 刪除外部資料表並不會刪除基礎資料。
使用 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 |
... | ... |