Kedro可以创建圆形图层吗

问题描述

我正在尝试将图层属性添加到目录中。我有一个常见的模式是获取一些数据(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',]

解决方法

哦,嘿,韦隆!哈哈。

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

我已经复制了您的管道,对我而言,它看起来很不错,这意味着没有循环依赖项。也许还有一些未在此处列出的节点正在影响您的输出?

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

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

请参见下图作为证明。

dropped layer viz

,

您描述的圆形层关系与最初设计数据层的方式不符,并限制了将哪些层馈给其他层:

| 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,Model Output |                                                        |

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