【问题标题】:How to run a pipeline except for a few nodes?除了几个节点之外,如何运行管道?
【发布时间】:2019-11-05 17:23:55
【问题描述】:

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

【问题讨论】:

  • 嗨 sofiacosta29。欢迎来到 SO!你的问题在某些方面对我来说似乎很完整,但你能说说你尝试了什么以及为什么它没有奏效吗?如果您需要帮助,可以查看有关如何制作 Minimal, Reproducible Example 的建议
  • 谢谢!我曾尝试在节点中使用标签,但我想知道是否有一种方法可以在没有两个节点的情况下运行管道。也就是说,不要使用带有许多标签的“kedro run --tag=tag1 --tag=tag2...”,而是使用“kedro run --except=tag3”之类的东西。请问有什么办法可以吗?感谢您的关注!

标签: python pipeline kedro


【解决方案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 加载到内存中,并将目录作为 io 加载到内存中

【讨论】:

    【解决方案2】:

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

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

    Kedro 会自动对节点进行排序,根据 toposort,看这个之前的回答:How to run the nodes in sequence as declared in kedro pipeline?

    【讨论】:

    • 最初的想法是维护原始管道并将其用于多个文件。不过,这似乎也是一个不错的选择,谢谢!
    • 你能澄清一下你的意思吗?
    • 拥有一个内置的管道,能够在一条指令中选择不运行哪些节点。例如,有一个带有节点“node1”、“node2”、...、“node10”的管道,能够调用其中的 9 个节点,而无需全部命名。理想情况下,例如,在类似于“kedro run --except=node5”的指令中。非常感谢您的关注!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多