【发布时间】: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子集需要几秒钟。所以我们需要有一些循环性。