【问题标题】:Can Kedro Create Circular LayersKedro 可以创建圆形图层吗
【发布时间】:2020-09-02 13:49:29
【问题描述】:

我正在尝试将图层属性添加到我的目录中。我有一个常见的模式是获取一些数据(raw),清理它,然后输出一个部件列表(pri)。然后,我需要那些部分的元数据,在这些部分中我从pri 获取部分列表并传递给获取数据的函数 (raw)。管道本身不是圆形的,但是当我创建圆形图层时,kedro 似乎不喜欢。

此用例是否存在我缺少的常见模式?

是否可以允许图层为圆形?

示例

我试图在下面整理一个通用示例。


raw_truck_sales:
  type: pandas.ParquetDataSet
  filepath: <filepath>
  layer: raw

int_truck_sales:
  type: pandas.ParquetDataSet
  filepath: <filepath>
  layer: int

pri_truck_sales:
  type: pandas.ParquetDataSet
  filepath: <filepath>
  layer: pri

pri_truck_sold_models:
  type: pandas.ParquetDataSet
  filepath: <filepath>
  layer: pri

raw_truck_metadata:
  type: pandas.ParquetDataSet
  filepath: <filepath>
  layer: raw

int_truck_metadata:
  type: pandas.ParquetDataSet
  filepath: <filepath>
  layer: int

pri_truck_metadata:
  type: pandas.ParquetDataSet
  filepath: <filepath>
  layer: pri
nodes = [
    node(
        get_truck_sales,
        inputs=None,
        outputs='raw_truck_sales',
    ),
    node(
        create_int_truck_sales,
        inputs='raw_truck_sales',
        outputs='int_truck_sales',
    ),
    node(
        create_pri_truck_sales,
        inputs='int_truck_sales',
        outputs='pri_truck_sales',
    ),
    node(
        lambda truck_sales: truck_sales[['model']],
        inputs='pri_truck_sales',
        outputs='pri_truck_models_sold',
    ),

    # This node takes the list of trucks sold and gets metadata for them
    # It seems to break kedros layers model by creating a circular reference
    node(
        get_truck_metadata,
        inputs='pri_truck_models_sold',
        outputs='raw_truck_metadata',
    ),
    node(
        create_int_truck_metadata,
        inputs='raw_truck_metadata',
        outputs='int_truck_metadata',
    ),
    node(
        create_pri_truck_metadata,
        inputs='int_truck_metadata',
        outputs='pri_truck_metadata',
    ),
]

【问题讨论】:

  • 我认为在这种情况下最好的办法是从有问题的数据集中完全删除图层信息 (pri_truck_sold_models)。 Viz 足够聪明,可以根据节点的拓扑顺序在逻辑位置对其进行可视化。我们确实在 viz 上错误地排除了圆形层,因为根据定义,层是线性的,至少在视觉上是这样。
  • 感谢@LimH 的反馈!这就说得通了。我认为对我们来说,图层不会很好地工作。在上面的示例中,我们通常处理包含产品子集 (trucks) 的数据集。我们需要从一个更大的数据集中获取一个非常小的数据子集,该数据集可能包含的不仅仅是子集。 ---- 使用上面的例子。在某些极端情况下,获取所有元数据实际上需要几天时间,而 trucks 子集需要几秒钟。所以我们需要有一些循环性。

标签: python kedro


【解决方案1】:

哦,嘿,韦伦!哈哈。

能否请您发布显示错误的整个堆栈跟踪?

我已经复制了你的管道,它对我来说可视化很好,这意味着没有循环依赖。也许还有其他未在此处列出的节点会影响您的输出?

编辑:Lim Hoang 刚刚指出您的示例有c_pro_truck_models_sold,如果那是pro_truck_models_sold,那将是循环的。

Lim 和我都同意放弃这些层是您最好的选择。无论如何,只要周围节点的层完好无损,kedro 可视化并不会真正受到损失的影响。

见下图为证。

【讨论】:

  • 修正了错字,谢谢 Tam。多亏了你和@LimH,现在这才有意义。我希望在图层之间获得更好的对齐,但我可以不使用图层。
【解决方案2】:

您描述的循环层关系与最初设计数据层的方式不一致,限制了哪些层馈送到其他层:

| Layer        | Input Layer                                 | Output Layer                                           |
|--------------|---------------------------------------------|--------------------------------------------------------|
| Reference    |                                             | Primary, Feature, Model Input, Model Output, Reporting |
| Raw          |                                             | Intermediate, Primary                                  |
| Intermediate | Raw                                         | Primary                                                |
| Primary      | Raw, Intermediate, Reference                | Feature, Reporting                                     |
| Feature      | Primary, Reference                          | Model Input, Reporting                                 |
| Model Input  | Feature, Reference                          | Reporting                                              |
| Model Output | Model Input                                 | Reporting                                              |
| Reporting    | Primary, Feature, Model Input, Model Output |                                                        |

Kedro 不强制执行此结构(或任何特定的层集),但它有助于支持它。因此,从最佳实践的角度来看,应避免数据层之间的循环依赖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2013-08-17
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多