You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADF中如何通过POST发送Databricks Notebook生成的黄金层数据?

问题排查与解决方案

问题根源

Databricks Notebook活动的默认输出仅包含运行元数据(如runPageUrl、executionDuration等),不会直接返回处理后的Golden层数据集,所以你用@activity('SilverToGoldenBusinessTransformations').output.value会报错——这个属性只存在于Lookup、Get Metadata等返回数据集的活动输出中。

可行解决方案

方案1:让Notebook主动返回需要的数据给ADF

在你的SilverToGoldenBusinessTransformations Notebook末尾,添加代码将需要发送的Golden层数据转换为JSON字符串,通过dbutils.notebook.exit()返回给ADF:

# 假设golden_df是处理后的Golden层DataFrame
import json
# 转换为JSON数组字符串(注意数据量不能超过1MB,否则会截断)
output_data = json.dumps(golden_df.toPandas().to_dict('records'))
dbutils.notebook.exit(output_data)

在ADF中:

  • ForEach活动的Items属性使用表达式:@json(activity('SilverToGoldenBusinessTransformations').output.runOutput)
  • Web Activity的请求体可以保持你原有的写法:{"id":"@item().id", ...}

方案2:用Lookup活动读取Golden层数据

如果Golden层数据量不大(默认最多10000行,可在Lookup活动配置中调整),可以在Notebook活动后添加一个Lookup活动:

  • 配置Lookup活动的数据源为Golden层的Delta/Parquet文件路径
  • 确保勾选“First row only”为否,这样会返回所有行数据
  • ForEach活动的Items属性使用:@activity('LookupGoldenLayer').output.value
  • Web Activity的请求体写法不变即可正常获取字段值

方案3:大数据量场景:在Notebook中直接调用REST API

如果Golden层数据量很大(超过Lookup的行数限制),推荐直接在Databricks Notebook中完成POST请求,避免ADF处理大量数据的性能问题:

import requests
import json

# golden_df是处理后的Golden层DataFrame
records = golden_df.toPandas().to_dict('records')
api_url = "你的目标API地址"
headers = {
    "Authorization": "你的授权信息",
    "Content-Type": "application/json"
}

# 可根据API支持的批量请求方式调整,比如逐条发送或批量发送
for record in records:
    response = requests.post(api_url, headers=headers, data=json.dumps(record))
    # 可选:添加响应状态检查
    response.raise_for_status()

注意事项

  • 方案1中dbutils.notebook.exit()的返回内容大小限制为1MB,数据量超过时优先选方案2或3
  • 方案2的Lookup活动最大返回行数为10000,若超过此数值,必须用方案3

内容的提问来源于stack exchange,提问作者lifeofthenoobie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:35:56