全部產品
Search
文件中心

E-MapReduce:SparkSQL開發

更新時間:Jun 19, 2026

本文介紹如何在阿里雲EMR Serverless Spark環境中開發SparkSQL任務,並指導您如何訪問Spark UI以查看任務詳情。

前提條件

已建立工作空間和SQL會話執行個體,詳情請參見建立工作空間管理SQL會話

建立SQL任務

重要

DLF Catalog 相關參數(如 spark.sql.catalog.dlf.warehouse)在 SparkSession 初始化時載入,通過 PySpark 代碼中的 spark.conf.set() 動態設定不會生效。如需自訂 DLF Catalog 參數,請在提交作業時通過啟動參數傳入,例如在 EMR Serverless Spark 控制台的配置項中添加,或在 CLI 中使用 --conf 參數指定。

  1. 進入開發頁面。

    1. 登入E-MapReduce控制台

    2. 在左側導覽列,選擇EMR Serverless > Spark

    3. Spark頁面,單擊目標工作空間名稱。

    4. EMR Serverless Spark頁面,單擊左側導覽列中的数据开发

  2. 建立任務。

    1. 开发目录頁簽下,單擊image(建立)表徵圖。

    2. 在彈出的對話方塊中,輸入名称,類型選擇SparkSQL,然後單擊确定

    3. 在右上方選擇資料目錄、資料庫和一個已啟動的SQL會話執行個體。

      您也可以在下拉式清單中選擇创建 SQL 会话,直接建立一個新的SQL會話執行個體。SQL會話更多介紹,請參見管理SQL會話

      image

    4. 在建立的任務編輯器中輸入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;

      返回資訊

      image

      樣本2:基於CSV的外部表格

      以下樣本示範了如何建立一個基於OSS儲存中CSV檔案的外部表格,並執行查詢操作。本範例程式碼中的Bucket地址(oss://<bucketname>/user/)需要根據實際情況修改。

      1. 建立臨時視圖。

        基於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'                             
        );
      2. 插入測試資料。

        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);
      3. 執行複雜查詢。

        基於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 陳述式建表。

    5. (可選)在開發頁面右側,您可以單擊版本信息頁簽,查看版本資訊。

      您可以在此處查看或對比任務版本資訊,支援對SQL代碼內容進行版本間的對比,並將不同之處進行標記。

  3. 運行並發布任務。

    1. 單擊运行

      返回結果資訊可以在下方的运行结果中查看。如果有異常,則可以在运行问题中查看。右側的運行記錄提供近三天的運行歷史供查閱。

    2. 確認運行無誤後,單擊右上方的发布

    3. 发布對話方塊中,可以輸入發布資訊,然後單擊确定

訪問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頁面。

image

在會話執行個體處訪問

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

image

快速鍵說明

為方便開發人員高效編寫和調試 SQL,平台提供以下常用快速鍵:

功能

Windows 快速鍵

Mac 快速鍵

說明

運行當前指令碼

Ctrl + Enter

Control + Enter

立即執行編輯器中全部或選中的 SQL 陳述式,等同於點擊【運行】按鈕。

格式化 SQL

Ctrl + P

Control + P

自動美化 SQL 代碼結構,統一縮排、換行和關鍵字大小寫,提升可讀性。適用於複雜查詢的整理。

尋找文本

Ctrl + F

Control + F

在當前指令碼中搜尋關鍵詞,支援逐個定位匹配項,便於快速定位欄位或表名。

儲存任務

Ctrl + S

Control + S

手動儲存當前未發布的任務內容,防止意外丟失修改。

選中當前行

Ctrl + L

Command + L

將游標所在整行設為選中狀態,可以僅運行選中內容。

切換行注釋

Ctrl + /

Command + /

對當前行或選中的多行添加/移除 -- 行注釋。

移動到檔案開頭

Ctrl + Home

Command + ↑

游標瞬移至指令碼首行首字元位置。

移動到檔案末尾

Ctrl + End

Command + ↓

游標瞬移至指令碼末行末字元位置。

剪下內容

Ctrl + X

Command + X

剪下所選內容;若未選中任何內容,則剪下游標所在的整行。

複製內容

Ctrl + C

Command + C

複製所選內容;若未選中,則複製游標所在的整行。

增加縮排

Ctrl + ]

Command + ]

對當前行或選中行塊整體右移一個縮排層級。

減少縮排

Ctrl + [

Command + [

對當前行或選中行塊整體左移一個縮排層級。

後續操作

建立完任務後,您可以建立工作流程來定期調度任務,詳情請參見建立工作流程。工作流程的完整調度樣本,請參見SparkSQL開發快速入門

常見問題

資料開發介面的查詢結果下載條數能否突破 10000 條限制?

不能。EMR Serverless Spark 資料開發的查詢結果受平台硬性限制,最多支援下載 10000 條且總量不超過 10 MB,無法通過配置修改突破該限制。

如需擷取更多資料,可以採用以下方式:

  • 通過 spark-submit 提交作業,將查詢結果寫入 OSS 或 HDFS。

  • 使用 DataWorks 的離線同步任務匯出資料。

Serverless Spark History 是否提供對外 API?

EMR Serverless Spark 已提供相關 API,可以通過API 概覽查閱具體介面列表。