产品Databricks Blog·原文 2026年10月24日

Databricks实测:同一AI Agent写声明式Spark管道,算力少 34 倍、代码少一半

Databricks用同一个模型对 22 个数据工程任务、12 组脏数据集做了 528 次构建,对比过程式PySpark与Spark声明式管道(SDP)。结果是声明式在运行前就能拦下结构性错误,集群执行秒数从 596 降到 17,但LLM token用量约为 2.3 倍,逻辑错误率两者接近。

AI解读:Databricks在博客中称,其平台上超过 70% 的SDP管道已由AI agent创建,这是它做这项对比测试的背景,并非该测试的验证结果。

测试用Opus 4.8对 22 个任务各生成 12 份含脏数据的输入,每种方法 264 次构建,共 528 次;过程式完成 255 次,声明式完成 258 次,两者都能交付可运行管道。

差异主要在出错代价:声明式有干跑校验,264 次构建中有 55 次在产出任何输出前被拦下;过程式没有运行前校验阶段。整个过程式运行耗 596 executor-seconds,声明式 17,约 34 倍。

声明式代码中位数 64 行,过程式 131 行,约少一半;过程式构建中有 19 次采用把数据载入内存逐行处理的捷径,数据变大时可能出问题,声明式构建中没有出现。

干跑只查结构性错误,查不出运行无报错但结果错误的“静默错误”。两者静默错误率分别为 27.7%(73/264)和 32.2%(85/264),作者认为差距太小不构成实质差异。

token成本相反:声明式中位构建约 0.50 美元,过程式约 0.26 美元,约为 2.3 倍,且是一次性写入成本;集群浪费会随数据量和运行次数反复发生,这是Databricks主张声明式更划算的依据。

Databricks在博客中发布一项基准测试,用同一个AI agent(Opus 4.8)分别以过程式PySpark和Spark声明式管道(SDP)编写数据管道,比较运行前的可校验性、代码量和成本。测试覆盖 22 个任务 × 12 组脏数据集 × 2 种写法,共 528 次构建。

该公司称,目前其平台上超过 70% 的SDP管道由agent创建;它据此认为agent试错的算力开销和代码评审的门槛都变得更重要。这是Databricks对自身平台使用情况的说法。

测试怎么做的

每个任务按真实工单的形式给出,指定要产出的表名、列名和数据类型,agent可自选实现方式,只要输出符合要求。每组任务另配 12 份带有生产环境常见脏值的输入数据。agent写出的管道会被实际运行,输出由一个不知道该结果出自哪种写法的自动评分器核对。声明式构建先经过Spark的干跑校验;构建失败可修改重试,次数有固定上限。Databricks表示,完整仓库含setup、prompt、数据集、评分器和每个数字背后的结果,可自行复跑。

结构错误能否在运行前被拦下

声明式管道是一段“描述”,Spark可以在运行前检查列引用是否能在所读数据集的schema中解析、每个数据集依赖是否都有生产者、整张图的完整性与执行顺序。作者将其类比为Rust这类带类型的语言在编译期检查数据流。过程式管道按步骤告诉Spark如何构造每个数据集,没有运行前的校验阶段,结构性错误要等集群跑到出错步骤才暴露。

博客给出的数字是:过程式运行累计 596 executor-seconds,声明式 17,约 34 倍;264 次声明式构建中有 55 次在产出任何输出前就被干跑拦下。

  • 过程式:错误在运行中途或部分写入后才出现,甚至不出现;运行前拦下 0 次
  • 声明式:结构性错误在干跑阶段拦截,264 次中 55 次零输出即被拒

代码量与写法一致性

完成构建中,声明式代码中位数为 64 行,过程式为 131 行,约少一半;Databricks称AST体积也小约 44%。作者还记录了写法分化:同一任务下,部分过程式实现用Spark变换,另一些把数据载入内存逐行处理,两者都能通过测试数据,但后者在数据增长时可能失败。测试中 19 次过程式构建用了这一捷径,声明式构建为 0 次。

作者认为更短、更一致的代码意味着团队需要评审和维护的内容更少。

逻辑错误与成本:两项限制

干跑只能发现结构性错误,查不出“跑得通但答案错”的静默错误。声明式的静默错误率为 32.2%(85/264),过程式为 27.7%(73/264),作者称两者差距约在 15% 以内,小到不足以视为真实差异,逻辑正确性仍需测试和评审来保证。

成本方向相反:声明式在写管道时反复干跑重试,把更多工作花在token上,中位构建约 0.50 美元,过程式约 0.26 美元,约 2.3 倍,属一次性固定支出,不随数据量或运行频率变化;过程式的浪费发生在集群上,会随每次坏运行重复产生。博客举的例子是一次失败的过程式运行烧掉约 521 executor-seconds,而被拒的声明式构建约 0.5 秒。

Databricks对适用范围的说明

博客FAQ回应了“是否必须信任agent”的问题:声明式agent只写描述表的代码,校验由Spark平台完成,agent本身不执行代码、不读取数据。作者也把结论限定在声明式方法上,称凡能把“我想要什么”与“去把它建出来”分开、前者可独立校验的工具都适用,Spark Declarative Pipelines只是其测试对象。

这些均为Databricks的测试结果与解释,未经独立复现;其中的美元成本按Opus 4.8列表价计算,会随所用模型服务变化。

信息来源

Databricks Blog原始来源

更多

新闻专题
外观