SparkSQL开发

本文介绍如何在阿里云EMR Serverless Spark环境中开发SparkSQL任务,并指导您如何访问Spark UI以查看任务详情。

前提条件

已创建工作空间和SQL会话实例,详情请参见创建工作空间管理SQL会话

创建SQL任务

  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;

        返回信息如下所示。

        image

    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

后续操作

创建完任务后,您可以创建工作流来定期调度任务,详情请参见创建工作流。工作流的完整调度示例,请参见SparkSQL开发快速入门