如何在 kedro 0.17.0 中加载特定的目录数据集实例?

How to load a specific catalog dataset instance in kedro 0.17.0?

我们使用的是 kedro 版本 0.15.8,我们以这种方式从目录中加载一个特定项目:

from kedro.context import load_context
get_context().catalog.datasets.__dict__[key]

现在,我们正在更改为 kedro 0.17.0 并尝试以相同的方式(使用框架上下文)加载目录数据集:

from kedro.framework.context import load_context
get_context().catalog.datasets.__dict__[key]

现在我们得到错误:

kedro.framework.context.context.KedroContextError: Expected an instance of ConfigLoader, got NoneType instead.

这是因为项目中的钩子 register_config_loader 没有被调用该函数的 hook_manager 使用。

项目挂钩的定义方式如下:

class ProjectHooks:

    @hook_impl

    def register_pipelines(self) -> Dict[str, Pipeline]:

        """Register the project's pipeline.

        Returns:

            A mapping from a pipeline name to a ``Pipeline`` object.

        """

        pm = pre_master.create_pipeline()

        return {

            "pre_master": pm,

            "__default__": pm

        }

    @hook_impl

    def register_config_loader(self, conf_paths: Iterable[str]) -> ConfigLoader:

        return ConfigLoader(conf_paths)

    @hook_impl

    def register_catalog(

        self,

        catalog: Optional[Dict[str, Dict[str, Any]]],

        credentials: Dict[str, Dict[str, Any]],

        load_versions: Dict[str, str],

        save_version: str,

        journal: Journal,

    ) -> DataCatalog:

        return DataCatalog.from_config(

            catalog, credentials, load_versions, save_version, journal

        )

project_hooks = ProjectHooks()

设置调用方式如下: """项目设置。"""

from price_based_trading.hooks import ProjectHooks


HOOKS = (ProjectHooks(),)

我们如何配置它以使用挂钩调用方法 load_context(_working_dir).catalog.datasets ?

我在 kedro 社区发布了同样的问题:https://discourse.kedro.community/t/how-to-load-a-specific-catalog-item-in-kedro-0-17-0/310

这是一个愚蠢的错误,因为我没有创建 Kedro 会话。要加载目录中的项目,可以使用以下代码完成:

from kedro.framework.session import get_current_session
from kedro.framework.session import KedroSession

KedroSession.create("name_of_proyect") as session:
    key = "item_of_catalog"
    session = get_current_session()
    context = session.load_context()
    kedro_connector = context.catalog.datasets.__dict__[key] 
    // or kedro_connector = context.catalog._get_datasets(key)