我正在尝试弄清楚如何在本地和 S3 上存储中间 Kedro 管道对象。特别是,假设我在 S3 上有一个数据集:
my_big_dataset.hdf5:
type: kedro.extras.datasets.pandas.HDFDataSet
filepath: "s3://my_bucket/data/04_feature/my_big_dataset.hdf5"
我想通过它们的 S3 URI 引用目录中的这些对象,以便我的团队可以使用它们。但是,我希望避免每次运行管道时重新下载数据集、模型权重等,除了 S3 副本之外,我还保留一个本地副本。如何使用凯德罗镜像文件?
这是一个很好的问题,KedroCachedDataSet
在同一运行中缓存数据集,当在同一运行中多次使用/加载数据集时,它会处理在内存中缓存数据集。实际上,在运行过程中持续存在的东西并不相同,一般来说,Kedro 不会做太多持久的事情。
也就是说,在我的脑海中,我可以想到两个(大部分)复制或提供此功能的选项:
- 在同一配置环境中使用相同的
catalog
,但目录数据集的文件路径如下所示TemplatedConfigLoader
:
my_dataset:
filepath: ${base_data}/01_raw/blah.csv
并且,您将base_data
设置为在"生产"模式下运行时和本地local_filepath/data
时s3://bucket/blah
。您可以决定如何在重写的context
方法中执行此操作(是使用local/globals.yml
(请参阅上面的链接文档)还是环境变量或其他什么。
- 使用单独的环境,可能是
local
(这就是它的用途!),您可以在其中保留目录的单独副本,其中文件路径替换为本地文件路径。
否则,下一个最佳选择是编写一个类似于CachedDataSet
的PersistentCachedDataSet
,该拦截包装数据集的加载/保存,并在首次加载时在确定性位置加载时创建本地副本,并在后续加载时查找该位置。