通过VS Code、通义灵码以及Serverless Spark提供的spark-submit工具,用户能够快速生成Spark任务代码并将其提交至Serverless Spark进行执行。本文将为您详细介绍如何使用上述工具提交Serverless Spark任务。
前提条件
步骤一:准备环境
安装VS Code与通义灵码插件
下载并安装 Visual Studio Code(推荐 v1.68 及以上版本)。
打开 VS Code,进入左侧扩展面板(Extensions),搜索并安装。有关安装的详细教程,请参见Visual Studio Code 中安装通义灵码。
Python(由 Microsoft 提供)—— 支持语法高亮与调试
通义灵码(Tongyi Lingma)—— 阿里云官方 AI 编程插件
安装完成后,使用您的阿里云账号登录通义灵码。
在状态栏点击“通义灵码”图标,将对话框中模式切换为 Agent 模式。
配置 VSCode 支持的 Shell。
按下
Cmd + Shift + P(Mac)或Ctrl + Shift + P(Windows/Linux)。输入
Terminal: Select Default Profile,然后选择它。选择一个受支持的 Shell。
Linux/macOS: bash, fish, pwsh, zsh
Windows: Git Bash, pwsh
完全退出 VSCode,然后重新打开 VSCode。
安装ossutil工具和spark-submit工具
下载并安装ossutil工具。有关安装的详细教程,请参见安装ossutil。
单击emr-serverless-spark-tool-0.9.0-SNAPSHOT-bin.zip,下载spark-submit工具并解压。
进入
conf/目录,用 VS Code 打开connection.properties文件,填写以下信息。accessKeyId=<ALIBABA_CLOUD_ACCESS_KEY_ID> accessKeySecret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> regionId=cn-hangzhou endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com workspaceId=w-xxxxxxxxxxxx涉及参数说明如下表所示。
参数
是否必填
说明
accessKeyId
是
执行Spark任务使用的阿里云账号或RAM用户的AccessKey ID和AccessKey Secret。
重要在配置
accessKeyId和accessKeySecret参数时,请确保所使用的AccessKey所对应的用户具有对工作空间绑定的OSS Bucket的读写权限。工作空间绑定的OSS Bucket,您可以在Spark页面,单击工作空间操作列的详情进行查看。accessKeySecret
是
regionId
是
地域ID。本文以杭州地域为例。
endpoint
是
EMR Serverless Spark的Endpoint。地址详情参见服务接入点。
本文以杭州地域公网访问地址为例,参数值为
emr-serverless-spark.cn-hangzhou.aliyuncs.com。说明如果ECS实例没有公网访问能力,需要使用VPC地址。
workspaceId
是
EMR Serverless Spark工作空间ID。
步骤二:生成示例数据和任务代码
生成示例数据
在本地创建一个新项目文件夹(例如:
spark-with-lingma),并在 VS Code 中打开该目录。启动通义灵码输入框,输入以下提示语:
创建一个新文件employees.csv,文件生成包括20行数据的csv格式。包含人员名称,部门名,薪资。名称使用常见英文名,部门为Engineering, Marketing, Sales, HR, Finance,薪资范围在5000-30000之间。通义灵码将自动生成如下内容,点击“接受”,自动保存为employees.csv 至当前项目目录。

在通义灵码输入框,输入以下提示语:
将employees.csv文件上传至oss://spark-demo通义灵码将
employees.csv上传至oss://spark-demo路径下。
生成任务代码
生成一个 PySpark 代码,用于计算各部门平均薪资。
在通义灵码输入框中输入以下自然语言指令:
帮我生成一个avg_salary_by_dept.py 文件,文件包含下述内容: 1. 使用pyspark读取oss路径oss://spark-demo/employees.csv 的 CSV 文件,包含表头并推断数据类型,定义明确的数据结构。(数据内容和刚刚生成的employees.csv一致) 2. 展示几个示例数据。 3. 计算每个部分的平均薪资,计算平均工资时需要去掉表头数据(列名为deparment)。 4. 将聚合后的结果打印出来。 5. 添加必要的import语句。通义灵码将生成类似以下代码,点击“接受”,自动保存为
avg_salary_by_dept.py至当前项目目录。
通过通义灵码将
avg_salary_by_dept.py上传至oss://spark-demo路径下。
步骤三:使用spark-submit提交任务
通过 spark-submit 工具将任务提交至 Serverless Spark 集群。
构建提交命令
使用通义灵码,构建spark-submit命令。
使用通义灵码输入以下提示:
以下是spark-submit示例,参考示例给我一个提交任务的代码: ./bin/spark-submit --name SparkPi \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --class org.apache.spark.examples.SparkPi \ oss://<yourBucket>/path/to/spark-examples_2.12-3.3.1.jar \ 10000 我的工具在/yourPath下,任务名AvgSalaryJob,使用root_queue队列,任务文件路径:oss://spark-demo/avg_salary_by_dept.py。通义灵码将输出:

执行任务提交
使用通义灵码,执行任务提交命令。
使用通义灵码输入以下提示。
执行命令/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit --name AvgSalaryJob --queue root_queue --num-executors 5 --driver-memory 1g --executor-cores 2 --executor-memory 2g oss://spark-demo/avg_salary_by_dept.py通义灵码将输出以下内容,单击“运行”。

查看运行结果。

步骤四:监控任务执行状态
您可以通过spark-submit工具+通义灵码查看任务状态。
查看任务状态:
/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit --status <jr-xxxxxxxxxxxx>
查看任务详情:
/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit --detail <jr-xxxxxxxxxxxx>
(可选)终止任务:
/yourPath/emr-serverless-spark-tool-0.9.0-SNAPSHOT/bin/spark-submit --kill <jr-xxxxxxxxxxxx>
您也可以登录Serverless Spark工作空间,在任务历史列表中查看该任务的详细运行日志及运行状态。
相关文档
通义灵码智能体模式更多用法,请参见智能体。
通义灵码使用相关问题,请参见常见问题。
spark-submit工具更多用法,请参见通过spark-submit提交任务。