在 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
我正在从事一个项目,由于公司的合规性规定,数据必须保存在一个共享目录中,该目录在程序员之间同步。另一方面,该项目的代码不能位于该共享目录中,否则我们将无法对其进行版本控制和协同工作,因为它们都是同步的。共享文件夹的路径几乎相同 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