如何使用管道从内存/文件运行?我认为这些功能已经存在,但我不确定如何编写这样的管道。
我的用例是:
- 正常流水线,从第 1 步到第 10 步
- 从第 2 步运行到第 10 步
想象一下,在第 1 步,我将一个数据帧写入 csv,第 2 步需要从中读取。如果我从第 1 步开始运行,我想将该数据帧传递到内存中(以节省读取时间)。但如果我从第 2 步开始运行,我将需要从 csv 读取。
使用 Kedro 的最佳做法是什么?
如何使用管道从内存/文件运行?我认为这些功能已经存在,但我不确定如何编写这样的管道。
我的用例是:
想象一下,在第 1 步,我将一个数据帧写入 csv,第 2 步需要从中读取。如果我从第 1 步开始运行,我想将该数据帧传递到内存中(以节省读取时间)。但如果我从第 2 步开始运行,我将需要从 csv 读取。
使用 Kedro 的最佳做法是什么?
根据您的用例,我可以想到两种方法。
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
b)另一种方法是,如果您总是希望第一个节点写入 csv,则让 node1 返回 2 个输出(相同的数据),一个 aspandas.CSVDataSet
和一个 as MemoryDataSet
,然后定义不同的管道。第二个节点从内存中读取的管道complete
,并且partial
您没有 node1,并且 node2 从 csv 数据集读取。
kedro run --pipeline complete
kedro run --pipeline partial
除了@Lorena Balan 建议的选项外,您还可以使用CachedDataSet
. 您的目录条目将类似于以下内容:
my_cached_dataset:
type: CachedDataSet
dataset:
type: pandas.CSVDataSet
filepath: path/to/file
缓存数据集将使用常规基础数据集保存数据,并且还将填充其内部缓存,然后后续加载将从该内存缓存中提取数据。如果缓存为空(您的方案 2),CachedDataSet
加载时将从基础 [CSV] 文件中提取数据。