1

如何使用管道从内存/文件运行?我认为这些功能已经存在,但我不确定如何编写这样的管道。

我的用例是:

  1. 正常流水线,从第 1 步到第 10 步
  2. 从第 2 步运行到第 10 步

想象一下,在第 1 步,我将一个数据帧写入 csv,第 2 步需要从中读取。如果我从第 1 步开始运行,我想将该数据帧传递到内存中(以节省读取时间)。但如果我从第 2 步开始运行,我将需要从 csv 读取。

使用 Kedro 的最佳做法是什么?

https://kedro.readthedocs.io/en/stable/06_nodes_and_pipelines/02_pipelines.html#pipeline-with-circular-dependencies

4

2 回答 2

2

根据您的用例,我可以想到两种方法。

a)您可以为此使用单独的环境。运行完整管道时,您使用的环境regular中没有相关数据集的目录条目(因此将变为MemoryDataSet),而在单独的dev环境中,您有一个条目以将catalog.yml其保存为 CSV。但这确实意味着您必须dev从节点 1 运行才能生成用于后续运行的 csv。

kedro run --env regular
kedro run --env dev
kedro run -e dev --from-nodes node2

相关文档:https ://kedro.readthedocs.io/en/stable/04_kedro_project_setup/02_configuration.html#additional-configuration-environments

b)另一种方法是,如果您总是希望第一个节点写入 csv,则让 node1 返回 2 个输出(相同的数据),一个 aspandas.CSVDataSet和一个 as MemoryDataSet,然后定义不同的管道。第二个节点从内存中读取的管道complete,并且partial您没有 node1,并且 node2 从 csv 数据集读取。

kedro run --pipeline complete
kedro run --pipeline partial

https://kedro.readthedocs.io/en/stable/06_nodes_and_pipelines/02_pipelines.html#running-a-pipeline-by-name

于 2020-08-18T08:52:28.210 回答
1

除了@Lorena Balan 建议的选项外,您还可以使用CachedDataSet. 您的目录条目将类似于以下内容:

my_cached_dataset:
  type: CachedDataSet
  dataset:
    type: pandas.CSVDataSet
    filepath: path/to/file

缓存数据集将使用常规基础数据集保存数据,并且还将填充其内部缓存,然后后续加载将从该内存缓存中提取数据。如果缓存为空(您的方案 2),CachedDataSet加载时将从基础 [CSV] 文件中提取数据。

于 2020-08-18T10:50:58.950 回答