【问题标题】:How to run parts of your Kedro pipeline conditionally?如何有条件地运行部分 Kedro 管道?
【发布时间】:2019-11-27 09:50:06
【问题描述】:

我有一个很大的管道,需要几个小时才能运行。一小部分需要经常运行,如何在不触发整个管道的情况下运行?

【问题讨论】:

    标签: python pipeline kedro


    【解决方案1】:

    有多种方法可以指定要运行的管道的哪些节点或部分。

    1. 使用kedro run 参数如--to-nodes/--from-nodes/--node 来明确定义需要运行的内容。

    2. kedro>=0.15.2 中,您可以定义多个管道,然后使用kedro run --pipeline <name> 只运行其中一个。如果未指定 --pipeline 参数,则运行默认管道。默认管道可能会结合其他几个管道。有关使用模块化管道的更多信息:https://kedro.readthedocs.io/en/latest/04_user_guide/06_pipelines.html#modular-pipelines

    3. 使用标签。用“小”之类的东西标记管道的一小部分,然后执行kedro run --tag small。在此处阅读更多信息:https://kedro.readthedocs.io/en/latest/04_user_guide/05_nodes.html#tagging-nodes

    【讨论】:

    • +1 我们最常在此类工作中使用标签。感谢分享模块化管道链接。这是我们尚未真正探索的功能。
    【解决方案2】:

    我建议您按照@idanov 的建议让您的标签或管道设置从 cli 正确运行。从长远来看,转向生产对您来说会容易得多。我还要补充一点,您可以在 python 内部进行大量临时管道修剪和运行,这里有一些示例。

    ?按标签过滤

    nodes = pipeline.only_nodes_with_tags('cars')
    

    按节点过滤

    nodes = pipeline.only_nodes('b_int_cars')
    

    过滤节点,如

    query_string = 'cars'
    nodes = [
       node.name 
       for node in pipeline.nodes 
       if query_string in node.name
       ]
    pipeline.only_nodes(*nodes)
    

    只有带有标签的节点

    nodes = pipeline.only_nodes_with_tags('cars', 'trains')
    

    只有带有标签的节点

    raw_nodes = pipeline.only_nodes_with_tags('raw')
    car_nodes = pipeline.only_nodes_with_tags('cars')
    raw_car_nodes = raw_nodes & car_nodes
    
    raw_nodes = (
       pipeline
       .only_nodes_with_tags('raw')
       .only_nodes_with_tags('cars')
       )
    

    添加管道

    car_nodes = pipeline.only_nodes_with_tags('cars')
    train_nodes = pipeline.only_nodes_with_tags('trains')
    transportation_nodes = car_nodes + train_nodes
    

    以上是我个人kedro notes的sn-p。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2022-08-10
      • 2021-01-08
      • 1970-01-01
      • 2022-10-25
      • 2020-09-13
      • 2022-01-21
      相关资源
      最近更新 更多