我想为不同的文件运行管道,但其中一些不需要所有已定义的节点。我怎样才能通过它们?
3 回答
模块化管道在这里有帮助吗?您可以构建两个管道,一个仅包含两个“可选”节点,另一个不包含,然后您可以返回默认管道作为两者的总和。像这样的东西:
def create_pipelines(**kwargs):
two_node_pipeline = Pipeline(node(), node())
rest_of_pipeline = Pipeline(node(), node(), node(), node())
return {
"rest_of_pipeline": rest_of_pipeline,
"__default__": two_node_pipeline + rest_of_pipeline,
}
然后,您可以kedro run --pipeline rest_of_pipeline
在没有这两个节点的情况下kedro run
运行管道,或者使用额外的两个节点运行管道。
否则,我认为如果您修改kedro_cli
or ProjectContext
or run.py
,无论它是什么,都应该很容易自己添加--except
功能。我可能会考虑这样做...
Kedro 将根据 toposort 自动对节点进行排序,请参阅之前的答案:如何按照 kedro 管道中声明的顺序运行节点?
您还可以使用--to-nodes
CLI 选项:kedro run --to-nodes node1,node2
. 在内部这将调用pipeline.to_nodes("node1", "node2")
-方法文档。请注意,您仍然需要确定必须运行的节点的“最终”列表。
要过滤掉管道的几行,您可以简单地从 python 内部过滤管道列表,我最喜欢的方法是使用列表推导。
按名字
nodes_to_run = [node for node in pipeline.nodes if 'dont_run_me' not in node.name]
run(nodes_to_run, io)
按标签
nodes_to_run = [node for node in pipeline.nodes if 'dont_run_tag' not in node.tags]
run(nodes_to_run, io)
可以按与管道节点相关的任何属性(名称、输入、输出、短名称、标签)进行过滤
如果您需要在生产中或从命令行以这种方式运行您的管道,您可以标记您的管道以使用标签运行,或者将自定义添加click.option
到您的run
函数内部,kedro_cli.py
然后在标志为True
.
注意
这假设您将管道加载到内存中,pipeline
并将目录加载到 asio