0

我想为不同的文件运行管道,但其中一些不需要所有已定义的节点。我怎样才能通过它们?

4

3 回答 3

1

模块化管道在这里有帮助吗?您可以构建两个管道,一个仅包含两个“可选”节点,另一个不包含,然后您可以返回默认管道作为两者的总和。像这样的东西:

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_clior ProjectContextor run.py,无论它是什么,都应该很容易自己添加--except功能。我可能会考虑这样做...

Kedro 将根据 toposort 自动对节点进行排序,请参阅之前的答案:如何按照 kedro 管道中声明的顺序运行节点?

于 2019-11-06T16:33:01.313 回答
1

您还可以使用--to-nodesCLI 选项:kedro run --to-nodes node1,node2. 在内部这将调用pipeline.to_nodes("node1", "node2")-方法文档。请注意,您仍然需要确定必须运行的节点的“最终”列表。

于 2019-11-16T13:18:29.223 回答
1

要过滤掉管道的几行,您可以简单地从 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

于 2019-11-07T14:00:18.943 回答