在 Kedro 中为数据目录设置基本目录

Setup a base dir for the Data Catalog in Kedro

我正在从事一个项目,由于公司的合规性规定,数据必须保存在一个共享目录中,该目录在程序员之间同步。另一方面,该项目的代码不能位于该共享目录中,否则我们将无法对其进行版本控制和协同工作,因为它们都是同步的。共享文件夹的路径几乎相同 C:\Users\<employee name>\<path to data>,有没有办法可以将 C:\Users\<employee name> 设置为我在 Kedro 中的数据目录的基本路径?

我尝试创建一个包含以下代码的 catalog.py 文件:

from kedro.io import DataCatalog
from kedro.extras.datasets.pandas import (
    CSVDataSet,
    ExcelDataSet,
)
from pathlib import Path

DEFAULT_DATA_PATH = Path.expanduser(
    Path(
        "~", 
        "Path to Data"
    )
)

DATA_CATALOG = DataCatalog(
    {
        "data": ExcelDataSet(
            filepath=Path(EXTERNAL_DATA_PATH, "data.xlsx").as_uri()
        )
            
    }
)

然后在 setting.py 我添加了这个:

from .catalog import DATA_CATALOG
DATA_CATALOG_CLASS = DATA_CATALOG

但随后出现以下错误:

Traceback (most recent call last):
  File "...\Miniconda3\Scripts\kedro-script.py", line 9, in <module>
    sys.exit(main())
  File "...\Miniconda3\lib\site-packages\kedro\framework\cli\cli.py", line 205, in main 
    cli_collection = KedroCLI(project_path=Path.cwd())
  File "...\Miniconda3\lib\site-packages\kedro\framework\cli\cli.py", line 114, in __init__
    self._metadata = bootstrap_project(project_path)
  File "...\Miniconda3\lib\site-packages\kedro\framework\startup.py", line 155, in bootstrap_project
    configure_project(metadata.package_name)
  File "...\Miniconda3\lib\site-packages\kedro\framework\project\__init__.py", line 166, in configure_project
    settings.configure(settings_module)
  File "...\Miniconda3\lib\site-packages\dynaconf\base.py", line 223, in configure      
    self._wrapped = Settings(settings_module=settings_module, **kwargs)
  File "...\Miniconda3\lib\site-packages\dynaconf\base.py", line 271, in __init__       
    self.validators.validate()
  File "...\Miniconda3\lib\site-packages\dynaconf\validator.py", line 318, in validate  
    validator.validate(self.settings)
  File "...\Miniconda3\lib\site-packages\kedro\framework\project\__init__.py", line 34, 
in validate
    if not issubclass(setting_value, default_class):
TypeError: issubclass() arg 1 must be a class

DATA_CATALOG_CLASS 在您提供数据目录实例时期望 class,因此出现错误。

我认为这里的方法是使用TemplatedConfigLoader,并将共享目录作为变量传递。您可以通过 global.yml 或仅通过变量提供此 SHARE_DIR

在你的catalog.yml some_data: 输入:pandas.CSVDataSet

在此处查看更多文档。 https://kedro.readthedocs.io/en/stable/kedro.config.TemplatedConfigLoader.html 路径:${SHARE_DIR}/file_name