如何从Databricks Python节点向ADF管道返回脚本输出值
ADF中Databricks Python节点返回值的轻量实现方案
Databricks Python节点是直接向集群提交Python脚本运行,没有Notebook的交互上下文,因此dbutils.notebook.exit()方法在这个节点类型下无法生效,也不存在和Notebook节点完全等价的原生返回接口。但完全不需要走写文件/写表再读取的冗余流程,直接捕获节点标准输出就能拿到你print的内容,是目前最直接的实现方式。
操作步骤
- 脚本侧处理:把你需要返回给ADF的值,在Python代码末尾单独用
print()输出。如果脚本本身有其他运行日志,建议给返回值加固定标识避免和日志混淆,示例代码:
# 此处为你的业务处理逻辑 value_to_return = {"key": "test_value", "id": 123} # 最后打印带固定标识的返回值,不要混其他无关打印内容 print(f"ADF_RETURN_RESULT::{value_to_return}")
- ADF侧取值:在Databricks Python节点后面加一个「设置变量」活动,依赖配置为Python节点运行成功,变量值直接读取Python节点输出的
stdOut字段(这个字段是ADF运行Python活动时默认捕获的脚本标准输出,也就是所有print的内容),表达式示例:
@split(activity('你的Databricks Python节点自定义名称').output.stdOut, 'ADF_RETURN_RESULT::')[1]
- 后续调用:你需要给Web活动传值的时候,直接引用前面设置的管道变量即可,不需要额外对接存储、数据库做中转。
注意事项
如果你的脚本运行时会抛出异常,错误栈信息会存在节点输出的
stdErr字段里,不会混到stdOut中,只要你给返回值加了固定分隔前缀,基本不会出现取值错乱的问题。
这个方案没有额外的存储读写开销,也不需要给Databricks集群配置额外的存储、数据库权限,比中转写文件/表的方案效率高很多。
内容的提问来源于stack exchange,提问作者Nik Holden
相关产品推荐
相关产品推荐

