Kedro 核心概念¶
本页介绍Kedro最基本的组成部分。您可以在Kedro术语表中找到关于这些内容以及更高级Kedro概念的更多信息。
您可能更想直接跳到下一节创建一个Kedro项目来获得实践Kedro的经验。
概述¶
Kedro节点是流水线的基本构建块。节点是对Python函数的封装,用于命名该函数的输入和输出。
管道(pipeline)用于组织一组节点(node)之间的依赖关系和执行顺序。
Kedro拥有一个名为数据目录(Data Catalog)的注册表,其中包含了项目可使用的所有数据源。该系统内置支持多种文件类型和文件系统。
Kedro项目遵循一个默认模板,该模板使用特定的文件夹来存储数据集、笔记本、配置和源代码。
节点¶
在Kedro中,节点(node)是对纯Python函数的封装,用于命名该函数的输入和输出。节点是管道(pipeline)的基本构建单元,一个节点的输出可以作为另一个节点的输入。
以下是两个简单节点的示例:
from kedro.pipeline import node
# First node
def return_greeting():
return "Hello"
return_greeting_node = node(func=return_greeting, inputs=None, outputs="my_salutation")
# Second node
def join_statements(greeting):
return f"{greeting} Kedro!"
join_statements_node = node(
join_statements, inputs="my_salutation", outputs="my_message"
)
流水线¶
管道(pipeline)用于组织一组节点(node)的依赖关系和执行顺序,在保持代码模块化的同时连接输入和输出。管道通过解析依赖关系来确定节点执行顺序,但不一定按照节点传入的顺序来运行它们。
这是一个由上述节点组成的流水线:
from kedro.pipeline import pipeline
# Assemble nodes into a pipeline
greeting_pipeline = pipeline([return_greeting_node, join_statements_node])
数据目录¶
Kedro数据目录是项目中用于管理数据加载和保存的所有数据源的注册表。它将节点输入和输出的名称映射为DataCatalog中的键,这是一个可以针对不同类型数据存储进行专门化的Kedro类。
Kedro 提供 多种 内置 数据集 支持各种文件类型和文件系统,因此您无需编写数据读写逻辑。
Kedro项目目录结构¶
使用Kedro项目的主要优势之一在于它们遵循默认模板,这使得协作变得简单直接。Kedro采用语义化命名来设置默认项目结构,包含用于存储数据集、笔记本、配置和源代码的特定文件夹。虽然您可以根据需要调整文件夹结构,但我们建议保留默认的Kedro项目结构,以便轻松与其他Kedro用户共享您的项目。
从Kedro 0.19开始,当您使用kedro new创建新项目时,可以通过选择要包含的工具来自定义项目结构。根据您的选择,最终生成的项目结构可能会有所不同。下面我们将展示当选择所有工具时的默认项目结构,并给出一个未选择任何工具的示例。
默认Kedro项目结构(已选择所有工具)¶
如果在项目创建过程中选择所有工具,你的项目结构将如下所示:
project-dir # Parent directory of the template
├── conf # Project configuration files
├── data # Local project data (not committed to version control)
├── docs # Project documentation
├── notebooks # Project-related Jupyter notebooks (can be used for experimental code before moving the code to src)
├── src # Project source code
├── tests # Folder containing unit and integration tests
├── .gitignore # Hidden file that prevents staging of unnecessary files to `git`
├── pyproject.toml # Identifies the project root and contains configuration information
├── README.md # Project README
├── requirements.txt # Project dependencies file
Kedro项目结构示例(未选择任何工具)¶
如果不选择任何工具,生成的结构将更为简化:
project-dir # Parent directory of the template
├── conf # Project configuration files
├── notebooks # Project-related Jupyter notebooks (can be used for experimental code before moving the code to src)
├── src # Project source code
├── .gitignore # Hidden file that prevents staging of unnecessary files to `git`
├── pyproject.toml # Identifies the project root and contains configuration information
├── README.md # Project README
├── requirements.txt # Project dependencies file
工具选择与生成的结构¶
在kedro new过程中,您可以选择要在项目中包含的工具。每个工具都会向项目结构中添加特定的文件或文件夹:
代码检查 (Ruff): 修改
pyproject.toml文件以包含Ruff的代码检查配置。它在[tool.ruff]下设置ruff,定义诸如行长度、选定规则和忽略规则等选项,并将ruff作为可选的dev依赖项包含其中。测试 (Pytest): 添加一个
tests文件夹用于存储单元测试和集成测试,有助于维护代码质量并确保代码库的变更不会引入错误。有关Kedro中测试的更多信息,请访问自动化测试指南。日志: 通过在
conf文件夹中包含logging.yml文件,允许特定的日志配置。有关Kedro中日志定制的更多信息,请访问Logging Customisation Guide。文档 (Sphinx): 添加一个带有Sphinx文档配置的
docs文件夹。该文件夹通常用于生成项目的技术文档。数据文件夹: 添加一个
data文件夹结构用于管理项目数据。data文件夹包含多个子文件夹来存储项目数据。我们建议您将原始数据放入raw并将处理后的数据移至其他子文件夹,如这篇数据工程文章所述。PySpark: 添加PySpark专用的配置文件。
conf¶
conf文件夹包含两个用于存储配置信息的子文件夹:base和local。
conf/base¶
将base子文件夹用于项目特定设置,以便在不同安装环境之间共享(例如与其他用户共享)。
该文件夹包含示例的三个文件,但您可以根据需要添加其他文件:
conf/local¶
local子文件夹对每个用户和安装环境都是特定的,其内容会被git忽略(通过包含在.gitignore中实现)。
将local子文件夹用于不应共享的设置,例如访问凭证、自定义编辑器配置、个人IDE配置以及其他敏感或个人内容。
默认情况下,Kedro会在conf/local目录下创建一个名为credentials.yml的文件。
src¶
该子文件夹包含项目的源代码。
自定义项目结构¶
虽然默认的Kedro结构被推荐用于协作和标准化,但必要时可以调整文件夹结构。这种灵活性使您能够根据需求定制项目,同时保持统一且可识别的结构。
组织代码时唯一的技术要求是,pipeline_registry.py和settings.py文件必须保留在目录中,这是它们默认创建的位置。
pipeline_registry.py 文件必须包含一个 register_pipelines() 函数,该函数返回一个 dict[str, Pipeline],将流水线名称映射到其对应的 Pipeline 对象。