如何在Kedro 0.18中通过编程方式注册Data Catalog?
Kedro 0.18中编程式定义Data Catalog的替代方案
Kedro 0.18移除了register_catalog钩子,但有两种可靠方式实现编程式定义Data Catalog:
1. 重写项目上下文的_create_catalog方法
在项目的src/<你的项目名>/run.py文件中,修改ProjectContext类,重写_create_catalog方法完全自定义Catalog构建逻辑:
from kedro.framework.context import KedroContext from kedro.io import DataCatalog, ParquetDataSet from pathlib import Path class ProjectContext(KedroContext): project_name = "<你的项目名>" project_version = "0.1" package_name = "<你的包名>" def _create_catalog(self, conf_catalog, conf_creds, feed_dict): # 动态构建路径逻辑 PREFIX = str(Path(self.project_path) / "data" / "01_raw") # 自定义DataCatalog实例 catalog = DataCatalog( { "products": ParquetDataSet(filepath=f"{PREFIX}/products.parquet"), # 其他数据集定义... } ) # 若需保留YAML配置的数据集,可合并: # base_catalog = super()._create_catalog(conf_catalog, conf_creds, feed_dict) # catalog = DataCatalog({**base_catalog._data_sets, **custom_datasets}) return catalog
这种方式会接管Kedro默认的Catalog创建流程,适合需要完全控制数据集定义的场景。
2. 手动创建Catalog并运行管道
若不需要修改项目默认上下文逻辑,可在自定义脚本中手动配置项目、创建Catalog后运行管道:
from kedro.framework.project import configure_project from kedro.io import DataCatalog, ParquetDataSet from kedro.pipeline import Pipeline from <你的包名>.pipelines import create_pipeline # 配置项目环境 configure_project("<你的项目名>") # 动态构建数据集 PREFIX = "data/01_raw" custom_catalog = DataCatalog( { "products": ParquetDataSet(filepath=f"{PREFIX}/products.parquet"), # 其他数据集... } ) # 获取并运行管道 pipeline = create_pipeline() from kedro.runner import SequentialRunner runner = SequentialRunner() runner.run(pipeline, custom_catalog)
这种方式更灵活,适合临时脚本或特定场景下的自定义运行逻辑。
注意事项
- 若需使用Kedro的数据集缓存、事务等功能,创建
DataCatalog时需传入正确的credentials和load_versions等参数 - 如需混合YAML配置与编程式定义的数据集,可先加载默认YAML配置的Catalog,再合并自定义数据集
内容的提问来源于stack exchange,提问作者gants_kuhelgarten
相关产品推荐
相关产品推荐

