1

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

2 回答 2

2

哦,嘿,韦伦!哈哈。

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

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

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

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

见下图为证。

掉层即

于 2020-09-02T15:01:27.603 回答
1

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

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

于 2020-09-02T15:12:17.347 回答