本文介紹如何在阿里雲EMR Serverless Spark環境中開發SparkSQL任務,並指導您如何訪問Spark UI以查看任務詳情。
前提條件
建立SQL任務
DLF Catalog 相關參數(如 spark.sql.catalog.dlf.warehouse)在 SparkSession 初始化時載入,通過 PySpark 代碼中的 spark.conf.set() 動態設定不會生效。如需自訂 DLF Catalog 參數,請在提交作業時通過啟動參數傳入,例如在 EMR Serverless Spark 控制台的配置項中添加,或在 CLI 中使用 --conf 參數指定。
-
進入開發頁面。
-
在左側導覽列,選擇EMR Serverless > Spark。
-
在Spark頁面,單擊目標工作空間名稱。
-
在EMR Serverless Spark頁面,單擊左側導覽列中的数据开发。
-
建立任務。
-
在开发目录頁簽下,單擊
(建立)表徵圖。 -
在彈出的對話方塊中,輸入名称,類型選擇SparkSQL,然後單擊确定。
-
在右上方選擇資料目錄、資料庫和一個已啟動的SQL會話執行個體。
您也可以在下拉式清單中選擇创建 SQL 会话,直接建立一個新的SQL會話執行個體。SQL會話更多介紹,請參見管理SQL會話。

-
在建立的任務編輯器中輸入SQL語句。
樣本1:基礎SQL操作
以下樣本示範了如何建立資料庫、切換資料庫、建立表、插入資料並執行查詢。
create DATABASE test_sql; use test_sql; CREATE TABLE IF NOT EXISTS my_table (id INT, name STRING); INSERT INTO my_table VALUES(1, 'Alice'),(2, 'Bob'); SELECT * FROM my_table WHERE id > 1;返回資訊

樣本2:基於CSV的外部表格
以下樣本示範了如何建立一個基於OSS儲存中CSV檔案的外部表格,並執行查詢操作。本範例程式碼中的Bucket地址(
oss://<bucketname>/user/)需要根據實際情況修改。-
建立臨時視圖。
基於OSS上的CSV檔案建立一個臨時視圖
orders,用於後續資料分析。視圖的欄位定義如下:-
order_id:訂單ID。 -
order_date:訂單日期和時間(例如'2025-07-01 10:00:00')。 -
order_category:商品品類(例如 "數位"、"服飾" 等)。 -
order_revenue:訂單金額。
CREATE TABLE orders ( order_id STRING, -- 訂單 ID order_date STRING,-- 訂單日期和時間 order_category STRING, -- 商品 SKU ID order_revenue DOUBLE -- 訂單金額 ) USING CSV OPTIONS ( path 'oss://<bucketname>/user/', header 'true' ); -
-
插入測試資料。
INSERT OVERWRITE TABLE orders VALUES ('o1', '2025-07-01 10:00:00', '數位', 5999.0), ('o2', '2025-07-02 11:30:00', '服飾', 299.0), ('o3', '2025-07-03 14:45:00', '數位', 899.0), ('o4', '2025-07-04 09:15:00', '家居', 99.0), ('o5', '2025-07-05 16:20:00', '數位', 1999.0), ('o6', '2025-07-06 08:00:00', '服飾', 199.0), ('o7', '2025-07-07 12:10:00', '數位', 799.0), ('o8', '2025-07-08 18:30:00', '家居', 59.0), ('o9', '2025-07-09 20:00:00', '數位', 399.0), ('o10', '2025-07-10 07:45:00', '服飾', 599.0), ('o11', '2025-07-11 09:00:00', '數位', 1299.0), ('o12', '2025-07-12 13:20:00', '家居', 159.0), ('o13', '2025-07-13 17:15:00', '服飾', 499.0), ('o14', '2025-07-14 21:30:00', '數位', 999.0), ('o15', '2025-07-15 06:10:00', '家居', 299.0); -
執行複雜查詢。
基於
orders表執行一個複雜的查詢,統計最近15天內不同品類的銷售表現。具體查詢內容包括:-
訂單數量:每個品類的訂單總數。
-
總銷售額(GMV):每個品類的訂單金額總和。
-
平均訂單金額:每個品類的訂單金額平均值。
-
最近一筆訂單時間:每個品類的最新訂單時間。
SELECT order_category, COUNT(order_id) AS order_count, SUM(order_revenue) AS gmv, AVG(order_revenue) AS avg_order_amount, MAX(order_date) AS latest_order_date FROM orders WHERE CAST(order_date AS TIMESTAMP) BETWEEN '2025-07-01' AND '2025-07-15' GROUP BY order_category HAVING SUM(order_revenue) > 1000 ORDER BY gmv DESC, order_category ASC; -
樣本3:建立 Hive Parquet 表
EMR Serverless Spark 預設使用 Paimon 作為表格式。如需建立 Hive Parquet 表,需要通過啟動參數覆蓋預設配置,並使用
USING PARQUET文法建表。前置配置
在作業啟動參數(EMR Serverless Spark 控制台的配置項或 CLI 的
--conf參數)中添加以下配置,防止 Paimon 預設接管表建立:spark.sql.catalog.spark_catalog=org.apache.spark.sql.hive.HiveCatalog spark.sql.defaultFileFormat=parquet方式一:通過 SQL 建立 Hive Parquet 表
CREATE TABLE my_hive_table ( id INT, name STRING, dt STRING ) USING PARQUET PARTITIONED BY (dt);說明建表時請使用
USING PARQUET文法,避免使用STORED AS PARQUET。方式二:通過 DataFrame API 建立 Hive Parquet 表
df.write.format("parquet").saveAsTable("my_hive_table")說明若工作空間已綁定 DLF Catalog,建議優先通過 SQL 陳述式建表。
-
-
(可選)在開發頁面右側,您可以單擊版本信息頁簽,查看版本資訊。
您可以在此處查看或對比任務版本資訊,支援對SQL代碼內容進行版本間的對比,並將不同之處進行標記。
-
-
運行並發布任務。
-
單擊运行。
返回結果資訊可以在下方的运行结果中查看。如果有異常,則可以在运行问题中查看。右側的運行記錄提供近三天的運行歷史供查閱。
-
確認運行無誤後,單擊右上方的发布。
-
在发布對話方塊中,可以輸入發布資訊,然後單擊确定。
-
訪問Spark UI
通過Spark UI,您可以查看任務的執行情況、資源使用方式、日誌資訊等,從而更好地分析和最佳化Spark任務。
在運行結果地區訪問
僅以下引擎版本支援該功能:
-
esr-4.x:esr-4.2.0及之後版本。
-
esr-3.x:esr-3.2.0及之後版本。
-
esr-2.x:esr-2.6.0及之後版本。
執行完SQL語句後,您可以在运行结果頁簽的最下方,單擊Spark UI,系統將自動跳轉至Spark UI頁面。

在會話執行個體處訪問
執行完SQL語句後,您可以在會話執行個體處,選擇,系統將自動跳轉至Spark UI頁面。

快速鍵說明
為方便開發人員高效編寫和調試 SQL,平台提供以下常用快速鍵:
|
功能 |
Windows 快速鍵 |
Mac 快速鍵 |
說明 |
|
運行當前指令碼 |
|
|
立即執行編輯器中全部或選中的 SQL 陳述式,等同於點擊【運行】按鈕。 |
|
格式化 SQL |
|
|
自動美化 SQL 代碼結構,統一縮排、換行和關鍵字大小寫,提升可讀性。適用於複雜查詢的整理。 |
|
尋找文本 |
|
|
在當前指令碼中搜尋關鍵詞,支援逐個定位匹配項,便於快速定位欄位或表名。 |
|
儲存任務 |
|
|
手動儲存當前未發布的任務內容,防止意外丟失修改。 |
|
選中當前行 |
|
|
將游標所在整行設為選中狀態,可以僅運行選中內容。 |
|
切換行注釋 |
|
|
對當前行或選中的多行添加/移除 |
|
移動到檔案開頭 |
|
|
游標瞬移至指令碼首行首字元位置。 |
|
移動到檔案末尾 |
|
|
游標瞬移至指令碼末行末字元位置。 |
|
剪下內容 |
|
|
剪下所選內容;若未選中任何內容,則剪下游標所在的整行。 |
|
複製內容 |
|
|
複製所選內容;若未選中,則複製游標所在的整行。 |
|
增加縮排 |
|
|
對當前行或選中行塊整體右移一個縮排層級。 |
|
減少縮排 |
|
|
對當前行或選中行塊整體左移一個縮排層級。 |
後續操作
建立完任務後,您可以建立工作流程來定期調度任務,詳情請參見建立工作流程。工作流程的完整調度樣本,請參見SparkSQL開發快速入門。
常見問題
資料開發介面的查詢結果下載條數能否突破 10000 條限制?
不能。EMR Serverless Spark 資料開發的查詢結果受平台硬性限制,最多支援下載 10000 條且總量不超過 10 MB,無法通過配置修改突破該限制。
如需擷取更多資料,可以採用以下方式:
-
通過
spark-submit提交作業,將查詢結果寫入 OSS 或 HDFS。 -
使用 DataWorks 的離線同步任務匯出資料。
Serverless Spark History 是否提供對外 API?
EMR Serverless Spark 已提供相關 API,可以通過API 概覽查閱具體介面列表。
> Spark UI