EMR Serverless Spark 如何透過 SQL 呼叫大模型:環境準備與關鍵設定指南
EMR Serverless Spark 中 SQL 调用大模型:环境准备与关键配置指南
EMR Serverless Spark 可透過 AI Function,讓用戶在 SQL 中呼叫大模型,無需編寫 Python 或 Java 推理程式碼。使用者須準備 esr-4.7.0 或更高版本、DLF/OSS 連接、模型服務通道及 RAM 權限,並可選擇百煉直連或註冊 PAI-EAS 自訂模型。
2026-10-29 3
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介: 本文系统梳理了在EMR Serverless Spark中通过SQL调用大模型所需的完整环境准备与关键配置,涵盖计算引擎版本、DLF/OSS元数据与存储连接、百炼或PAI-EAS模型服务接入、RAM权限策略四大前置条件;详解百炼零配置调用与PAI-EAS自定义模型注册两种方式;明确aiquery和aiembeddingtext函数语法及JSON结构化输出技巧;并列出影响稳定性的六个核心Spark配置参数及三步验证排障方法,为数据工程师提供可落地、可复用、可运维的SQL+AI生产实践路径。
在数据湖场景中,将大模型能力直接嵌入 SQL 流水线已不再是实验性尝试,而是生产级 AI 增强型 ETL 的标准实践。EMR Serverless Spark 通过 AI Function 机制,使工程师无需编写 Python/Java 推理胶水代码、不需维护独立模型服务集群,即可在标准 SQL 查询中调用文本生成、情感分析、多模态理解、向量嵌入等模型能力。本文聚焦「如何让 SQL 真正调用起大模型」这一实操起点,系统梳理环境就绪条件、模型注册路径、SQL 函数语法规范及典型配置陷阱,为数据工程师快速构建可验证、可复用、可运维的 SQL+AI 流水线提供确定性路径。
一、前置环境:四类资源必须就位
SQL 调用大模型并非仅靠一条 SELECT ai_query(...) 就能运行,其背后依赖一套协同就绪的基础设施栈。缺一不可:
- 计算引擎版本:必须使用
esr-4.7.0或更高版本(对应 Spark 3.5.x 内核),低版本不支持ai_query、ai_embedding_text等内置函数及模型服务注册协议; - 元数据与存储连接:已开通 DLF(Data Lake Formation)并完成 Catalog 配置,OSS 存储桶具备读写权限,确保模型输入数据(如文本表、图片路径列)可被 Spark SQL 正确访问;
模型服务通道:根据安全与性能要求,选择并完成其中一种模型接入方式——
- 百炼直连:适用于 PoC 或非敏感业务,只需在百炼控制台开通服务并获取 API Key;
- PAI-EAS 内网对接:适用于金融、政务等高合规场景,需在 PAI-EAS 中部署模型,并通过 VPC 内网打通 EMR Serverless Spark 工作空间;
- 权限策略:RAM 角色需授予
AliyunEMRServerlessSparkFullAccess及AliyunPAIEASFullAccess(若对接 EAS),同时确保 OSS Bucket Policy 允许oss:GetObject权限。
未满足任一条件,SQL 执行将报错 Function not found、Model service unreachable 或 Permission denied,而非模型推理失败。
二、模型注册:两种模式,一次配置长期生效
EMR Serverless Spark 不预装所有模型,而是以“按需注册、统一调度”为原则管理模型资产。注册动作仅需执行一次,后续 SQL 即可复用:
方式一:百炼模型零配置调用(推荐快速验证)
无需额外注册语句。只要在 SQL 中显式指定百炼模型服务名,引擎自动路由至百炼后端:
SELECT ai_query('qwen3.6-plus', '请将以下评论总结为3个关键词:' || comment) AS keywords
FROM user_reviews
LIMIT 10;
此时需确保会话级或集群级已配置百炼凭证(通过 EMR 控制台工作空间参数或 Spark Conf 设置 spark.emr.ai.function.bailian.apikey)。
方式二:PAI-EAS 自定义模型注册(企业级生产)
需先执行 REGISTER MODEL DDL 注册外部服务端点:
REGISTER MODEL my_qwen_06b
USING PAI_EAS
OPTIONS (
'endpoint' = 'http://<your-eas-service>.pai-eas.aliyuncs.com',
'token' = '<your-eas-token>',
'timeout' = '30s'
);
注册成功后,即可在 SQL 中以模型名调用:
SELECT ai_query('my_qwen_06b', prompt) AS response
FROM prompts_table;
⚠️ 注意:
REGISTER MODEL是会话级操作,若使用作业提交(Job Run),需将注册语句与查询合并为单个.sql文件提交;若使用交互式 Notebook,则需在首次查询前执行注册。
三、SQL 函数语法:从基础调用到结构化输出
AI Function 提供两类核心 UDF,覆盖主流大模型使用范式:
| 函数名 | 输入类型 | 输出类型 | 典型用途 |
|---|---|---|---|
ai_query(model_name, prompt) |
STRING | STRING | 文本生成、问答、摘要、分类(返回原始字符串) |
ai_embedding_text(model_name, text) |
STRING | ARRAY | 文本向量化(如 text-embedding-v4),用于后续向量检索 |
进阶用法支持结构化 JSON 输出解析(需模型本身支持 response_format: {"type": "json_object"}):
-- 假设模型返回标准 JSON 字符串,用 get_json_object 提取字段
WITH raw AS (
SELECT ai_query('qwen3.5-plus',
CONCAT('请以JSON格式输出:{\"sentiment\": \"positive/negative/neutral\", \"confidence\": 0.0-1.0}', comment)
) AS json_str
FROM user_reviews
)
SELECT
get_json_object(json_str, '$.sentiment') AS sentiment,
CAST(get_json_object(json_str, '$.confidence') AS DOUBLE) AS confidence
FROM raw;
四、关键配置项:影响稳定性与性能的六个参数
除模型注册外,以下 Spark 配置直接影响调用成功率与吞吐:
spark.emr.ai.function.timeout: 默认15s,对长上下文或多模态请求建议调至60s;spark.emr.ai.function.max_retries: 默认2,网络抖动时建议设为3;spark.emr.ai.function.batch_size: 控制批量并发请求数,默认10,增大可提升吞吐但增加后端压力;spark.emr.ai.function.concurrency: 每 Executor 并发调用数,默认4,需结合 EAS 实例规格调整;spark.emr.ai.function.fail_on_error: 默认true,设为false可使单条记录失败不影响整批执行(配合try_cast使用);spark.emr.ai.function.cache.enabled: 设为true可启用模型响应缓存(需开启 DLF Cache Service),适合重复 prompt 场景。
这些参数可在作业提交时通过 --conf 指定,或在 Notebook 中通过 spark.conf.set() 动态设置。
五、验证与排障:三步确认调用链路通畅
完成配置后,建议按顺序执行验证:
- 连通性测试:运行
SELECT ai_query('qwen-plus', '你好'),确认返回非空字符串且无Connection refused; - 数据流测试:对含 100 条记录的小表执行
ai_embedding_text,检查向量维度是否匹配模型声明(如text-embedding-v4输出 1024 维); - 压力测试:使用
spark.sql("SELECT ... FROM large_table LIMIT 10000")观察 P95 延迟与失败率,结合spark.ui查看ai_function_calls度量指标。
常见错误归类:
Model not registered→ 检查REGISTER MODEL是否执行、名称是否拼写一致;HTTP 429 Too Many Requests→ 调低batch_size或联系百炼/EAS 运维提升配额;JSON parse error→ 模型未开启 JSON 格式响应,或 prompt 描述不明确导致输出非标准格式。
SQL 调用大模型的本质,是将模型服务抽象为可编排、可观测、可治理的数据处理算子。当环境配置成为确定性步骤,SQL 就真正成为驱动 AI 能力的通用接口——不再区分“数据”与“AI”,只有一致的表达、统一的调度、可控的交付。
参考文献
- 《怎么在 Spark 里调用大模型?全解析:方案对比与实战经验》 https://blog.csdn.net/dbPanda/article/details/164371901
- 《如何在 Ray 中调用大模型?基于 EMR Serverless Spark 的端到端方案设计》 https://developer.aliyun.com/article/1776153
- 《Daft AI Function:用 DataFrame 表达式搞定大模型调用与多模态向量化》 https://developer.aliyun.com/article/1770403
- 《多模态数据(视频/图片/文本/音频)如何用大模型处理?EMR Serverless Spark 构建统一AI增强型数据湖方案》 https://developer.aliyun.com/article/1776127
- 《Daft 多模态视频抽帧性能优化实践:从抽帧到大模型打标,一条视频理解流水线是怎么跑起来的》 https://developer.aliyun.com/article/1770396
- 《EMR Serverless Spark通过SQL调用PAI-EAS部署的Qwen3-0.6B模型,实现无代码AI推理集成,支持批量情感分析与内容生成。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/emr-serverless-spark-docking-external-model-service-practice-tutorial
- 《EMR Serverless Spark通过SQL调用PAI-EAS部署的Qwen3-0.6B模型,实现无代码AI推理集成,支持批量情感分析与内容生成。 - 开源大数据平台E-MapReduce - 阿里云》 https://www.alibabacloud.com/help/zh/emr/emr-serverless-spark/use-cases/emr-serverless-spark-interfaces-with-external-model-services
- 《AI中心是EMR Serverless Spark专为大数据与AI融合场景打造的一站式智能引擎,通过AI Function与模型服务两大核心能力,让您仅需SQL即可在海量数据处理流程中无缝集成大模型能力。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/ai-center-14/
- 《AI中心是EMR Serverless Spark专为大数据与AI融合场景打造的一站式智能引擎,通过AI Function与模型服务两大核心能力,让您仅需SQL即可在海量数据处理流程中无缝集成大模型能力。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/the-ai-center-beta/
- 《AI中心是EMR Serverless Spark专为大数据与AI融合场景打造的一站式智能引擎,通过AI Function与模型服务两大核心能力,让您仅需SQL即可在海量数据处理流程中无缝集成大模型能力。-开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心》 https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/the-ai-center
來源:阿里雲開發者社區 AI · developer.aliyun.com