hook - 如何在 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: 期望的实例
ConfigLoader
,得到了NoneType
。
这是因为项目中的钩子 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)
推荐阅读
- python - 交换语言时键盘模块热键中断(Microsoft IME)
- r - 如何使用几列的命令 summarise() 和 group_by() 确定 R 中每列的平均值?
- electron - Electron——如何让我的程序自动更新到原来的安装目录?
- c - 如果使用连接字符串,则打印 DataGrid WPF
- docker - GatsbyJS - 如何解决 GatsbyJS 的“net::ERR_CONNECTION_REFUSED”?
- rust - 如何为任何给定请求重用 Tower::ServiceBuilder
- php - 如何停止下载整个网站以及如何加密网站
- java - 提前通知客户繁重的计算功能
- macos - 在 macOS Big Sur 上为 Dynare 配置 Octave
- css - 加载后背景图像调整大小