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

KedroSession调用run时无法识别会话中新增的数据集

问题描述

在Jupyter Notebook中,执行以下命令时,使用catalog.yaml里预定义的数据集和参数能正常运行:

session.run(pipeline_name='sim', from_inputs=['measurements', 'params:simulation'])

但手动在会话里添加数据集后,再执行session.run就抛出ValueError:

>>> ds = GenMsmtsDataSet()
>>> catalog.add('ipy_msmts', ds)
>>> session.run(pipeline_name='sim', from_inputs=['ipy_msmts', 'params:simulation'])
ValueError: Pipeline does not contain data_sets named ['ipy_msmts']

虽然catalog.list()显示ipy_msmts已经存在,而且catalog.load('ipy_msmts')能正常加载,但流水线就是识别不了这个手动添加的数据集。

原因分析

流水线的输入列表是在初始化阶段就固定死的——它只认预先在流水线配置或者catalog.yaml里声明过的数据集名称,不会自动感知你后来手动加到catalog里的新数据集。你的sim流水线一开始只配置了measurements作为输入源,根本不知道ipy_msmts是什么,所以就算你把它塞进catalog,流水线也不认这个输入项。

解决方案

方法一:修改流水线配置

直接在流水线的定义文件中,把ipy_msmts添加到允许的输入数据集列表里;如果框架支持的话,也可以配置成允许动态输入。

方法二:替换原有数据集

如果你只是想用自定义数据替换原来的measurements,不用新增数据集,直接覆盖catalog里已有的measurements条目即可:

ds = GenMsmtsDataSet()
catalog.add('measurements', ds, replace=True)
session.run(pipeline_name='sim', from_inputs=['measurements', 'params:simulation'])

方法三:动态调整流水线输入映射

如果用的是Kedro这类框架,可以在运行前调整流水线的输入映射,把ipy_msmts映射成流水线原本期待的measurements:

from kedro.pipeline import Pipeline, node
# 获取已定义的sim流水线
sim_pipeline = session.pipeline.named_pipelines['sim']
# 重新映射输入,用ipy_msmts替代原来的measurements
new_pipeline = sim_pipeline.from_inputs({'measurements': 'ipy_msmts'})
# 运行调整后的流水线
session.run(pipeline=new_pipeline, from_inputs=['ipy_msmts', 'params:simulation'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:30:55