Содержание
  1. Для чего нужен Kedro
  2. Node и именованные входы
  3. Pipeline и зависимости
  4. Data Catalog и конфигурация
  5. Учебный поток двух функций
  6. Локальный запуск и развёртывание
  7. Границы инструмента
  8. Частые вопросы
Обзоры

Обзор Kedro: структура проекта и конвейер данных

15 ноября 2026 · 11 минут чтения

Обзор Kedro: структура проекта и конвейер данных показывает фреймворк для организации Python-проектов обработки данных. Узлы описывают преобразования, конвейер связывает их по именам наборов, Data Catalog отвечает за загрузку и сохранение, а запуск идёт одной командой из корня проекта.

Для чего нужен Kedro

Kedro — открытый Python-фреймворк под лицензией Apache 2.0, который переносит практики программной инженерии на конвейеры данных и машинного обучения. В статье AWS Open Source Blog перечислены задачи, которые решает инструмент: стандартизация делает проекты понятнее и проще в обновлении, абстракция конвейера позволяет переиспользовать части, а встроенные практики помогают командам с разным опытом работать согласованно. Там же названа цель — быстрее переходить от эксперимента к продакшену.

Практический смысл для читателя: преобразования данных отделяются от кода загрузки. Функция считает строки и суммы, а откуда пришли данные и куда ушёл результат, решает конфигурация. Это разделение упрощает тесты и повторные запуски.

Структура проекта создаётся командой kedro new. Документация проекта описывает интерактивный поток: сначала запрашивается имя проекта, затем набор инструментов, затем решение о включении примера конвейера. Имя проекта задаёт значения project_name, repo_name и python_package; имена, чей производный пакет совпадает с ключевым словом Python или модулем стандартной библиотеки, отклоняются, чтобы избежать конфликтов импорта.

Инструменты выбираются по номерам или флагами. В списке документации: линтинг с ruff, тесты с pytest, расширенное логирование, документация Sphinx, структура папок для данных и конфигурация PySpark. Флаг --tools принимает имена через запятую, значения all или none.

Каркас проекта раскладывает файлы по назначению. В разборе AWS показана типовая раскладка: conf с подпапками base и local, data с уровнями от 01_raw до 08_reporting, docs, logs, notebooks и src с пакетом проекта, узлами, конвейерами и тестами. Такая раскладка задаёт место каждому артефакту.

Node и именованные входы

Узел — строительный блок конвейера, который представляет задачу. В документации проекта узел создаётся указанием функции, имён входных переменных и имён выходных переменных. Пример из документации: функция add(x, y) с двумя входами и одним выходом превращается в Node(func=add, inputs=["a", "b"], outputs="sum").

Имена входов и выходов обозначают наборы данных. Аргументы функции сопоставляются с ними при описании узла. Связь между ними задаёт синтаксис узла. Документация приводит таблицу: None означает отсутствие входа, строка 'a' — один вход, список ['a', 'b'] — несколько, словарь вида dict(arg1='x', arg2='y') — именованные входы. Для выходов действует та же логика: строка, список или словарь.

Узел можно пометить. Аргумент name даёт читаемую подпись в логах, аргумент tags позволяет запускать часть конвейера командой kedro run --tags=ds. Документация отмечает, что имена узлов и тегов содержат буквы, цифры, дефисы, подчёркивания и точки.

Запустить узел отдельно можно методом run, передав словарь значений: adder_node.run(dict(a=2, b=3)) вернёт {'sum': 5}. Тот же узел вызывается как обычная функция Python.

Отдельный случай — генераторные функции. Документация предупреждает: генераторные узлы не работают с асинхронной загрузкой и сохранением, при флаге --async Kedro поднимает ValueError. Декоратор над генератором обязан вернуть генератор без обхода; если декоратор вызывает list(), Kedro сохранит результат одним значением.

Для читателя важна проверяемая граница: узел получает данные по имени набора. Путь к файлу живёт в конфигурации каталога.

Pipeline и зависимости

Конвейер объединяет узлы в workflow. Зависимости выводятся из совпадения имён: если один узел объявляет выход paid_orders, а другой объявляет вход paid_orders, порядок устанавливается автоматически. Явное описание рёбер не требуется.

В примере AWS конвейер data_science собран из трёх узлов: split_data принимает master_table и parameters и отдаёт четыре набора, train_model принимает X_train и y_train и отдаёт regressor, evaluate_model принимает regressor, X_test и y_test и не имеет выходов. Такая запись читается как граф.

Теги можно ставить на весь конвейер. Если в определении Pipeline передан аргумент tags=, документация проекта сообщает, что Kedro прикрепит соответствующий тег к каждому узлу внутри конвейера. Запуск kedro run --tags=pipeline_tag выполнит узлы этого конвейера.

Проверка зависимостей полезна до запуска. Kedro-Viz строит интерактивное представление конвейера: узлы, зависимости, выходы и наборы данных. В разборе AWS визуализация запускается командой kedro viz и открывает локальный веб-сервер по адресу http://127.0.0.1:4141/. Документация проекта уточняет, что пакет kedro-viz ставится отдельно, а начиная с версии 12.0.0 доступен режим Workflow, который показывает, какие узлы завершились успешно, какие упали и какие пропущены в последнем запуске.

Граф показывает структуру связей. Правильность бизнес-определения суммы он не проверяет, поэтому арифметику стоит закрывать тестом.

Data Catalog и конфигурация

Data Catalog — реестр источников данных проекта. Он задаётся YAML-файлом, который сопоставляет имена входов и выходов узлов с ключами класса DataCatalog. Документация проекта описывает минимальную запись: имя набора, ключ type с классом набора и ключ filepath с расположением файла.

С версии 0.19.0 наборы данных вынесены из ядра Kedro в пакет kedro-datasets. С версии 2.0.0 этого пакета имена классов изменились: заглавная S в DataSet заменена на строчную s, поэтому CSVDataSet стал CSVDataset. Это объясняет расхождения между старыми руководствами и текущей документацией.

Расположение файла задаётся через fsspec. Документация проекта перечисляет поддерживаемые протоколы: file:// для локальной и сетевой файловой системы, hdfs:// для Hadoop, s3:// для Amazon S3 и совместимых хранилищ, gcs:// для Google Cloud Storage, abfs:// для Azure, а также http:// и https:// для чтения напрямую с веб-серверов. Без протокола подразумевается локальная файловая система.

Настройки набора делятся на группы. load_args и save_args передаются в стороннюю библиотеку: для pandas.ExcelDataset аргументы load_args уходят в pandas.read_excel. fs_args управляет работой с файловой системой. Ключ validator проверяет данные по схеме или правилу при каждой загрузке и сохранении.

Учётные данные хранятся отдельно. Документация проекта сообщает, что каталог читает их из credentials.yml, обычно в conf/local/, и передаёт в конструктор набора; запись в catalog.yml ссылается на блок по имени через ключ credentials.

Версионирование включается флагом versioned: True. Документация проекта описывает результат: filepath становится основой папки, каждая новая версия сохраняется по пути <filepath>/<version>/<filename>, где <version> — отметка времени в формате YYYY-MM-DDThh.mm.ss.sssZ. По умолчанию kedro run загружает последнюю версию. Набор поддерживает версионирование, если наследуется от kedro.io.AbstractVersionedDataset.

Окружения разделяются папками. Документация проекта описывает порядок: загрузчик конфигурации сканирует conf/base, затем conf/local как переопределяющее окружение, и объединяет результат. Практический приём — держать в conf/base/catalog.yml продакшен-расположения, а в conf/local/catalog.yml — пути к выборкам для прототипирования.

Учебный поток двух функций

Ниже — самостоятельный учебный пример. Вход условный: три заказа, из которых два оплачены. Ожидаемая сумма — 170.

PYTHON30 строк
from kedro.pipeline import node, Pipeline

orders = [
    {"id": 1, "amount": 100, "status": "paid"},
    {"id": 2, "amount": 40, "status": "refund"},
    {"id": 3, "amount": 70, "status": "paid"},
]


def paid_rows(orders):
    return [row for row in orders if row["status"] == "paid"]


def total_amount(paid):
    return sum(row["amount"] for row in paid)


def create_pipeline(**kwargs):
    return Pipeline(
        [
            node(func=paid_rows, inputs="orders", outputs="paid_orders"),
            node(func=total_amount, inputs="paid_orders", outputs="paid_total"),
        ]
    )


if __name__ == "__main__":
    paid = paid_rows(orders)
    assert [row["id"] for row in paid] == [1, 3]
    assert total_amount(paid) == 170

Разбор по шагам. Первая функция оставляет строки со статусом paid и возвращает два заказа с идентификаторами 1 и 3. Вторая функция складывает суммы и возвращает 170. Имена orders, paid_orders и paid_total — это имена наборов, которые связывают узлы в цепочку orders → paid_orders → paid_total.

Функции остаются чистыми: внутри нет обращений к сети и файлам. В полноценном проекте загрузка orders и сохранение paid_total настраиваются через Data Catalog. Приведённый скрипт проверяет функции напрямую и описывает граф; выполнение всего графа и файловый ввод-вывод в нём не запускаются.

Граница примера обозначена явно. Строка со статусом NULL не попадает в выборку оплаченных, потому что сравнение с paid даёт ложь. Если бизнес-правило требует другого поведения, условие меняется в одном месте — внутри paid_rows.

Локальный запуск и развёртывание

Создание проекта начинается с команды. Документация проекта приводит вариант uvx kedro new, который запускает Kedro в чистом временном окружении без установки в систему. Альтернатива — обычная установка в виртуальное окружение. Для потока kedro new требуется установленный Git.

Быстрый неинтерактивный запуск выглядит так: uvx kedro new --name=My-Project --tools=none --example=n. Документация проекта приводит и другие сочетания, например --tools=lint,docs,pyspark для проекта с линтингом, документацией и PySpark без примера кода.

После создания проекта нужно перейти в его папку и установить зависимости: uv pip install -r requirements.txt. Затем проект запускается командой kedro run. Документация проекта напоминает: команда требует хотя бы одного конвейера с узлами, зарегистрированного в pipeline_registry.py.

Визуализация ставится отдельно: uv pip install kedro-viz, запуск — kedro viz run. Браузер открывает вкладку с адресом http://127.0.0.1:4141/. Выход из визуализации — закрытие вкладки, возврат управления терминалом — сочетание Ctrl+C.

Развёртывание в облаке выходит за рамки учебного примера. В разборе AWS показано, как конвейер обучает модель на Amazon SageMaker: данные выкладываются в S3, добавляется окружение conf/sagemaker, обучение запускается командой kedro run --env sagemaker. Тот материал написан для Kedro 0.16.5 и Python 3.7 и использует устаревшие хуки, поэтому из него берут устройство потока, а команды установки сверяют с текущей документацией.

Сравнение двух подходов к запуску:

Критерий Локальный запуск Развёртывание в облаке
Команда kedro run kedro run --env sagemaker
Конфигурация conf/base, conf/local дополнительное окружение в conf
Хранение данных локальная файловая система S3 через протокол s3://
Обучение модели на машине разработчика задание SageMaker
Проверка результата тест и лог запуска лог задания и метрика качества

Границы инструмента

Kedro организует Python-проект. Он задаёт раскладку файлов, связывает узлы по именам наборов и выносит загрузку в конфигурацию. Планировщиком по умолчанию он не является: расписанием и оркестрацией занимаются внешние системы.

Data Catalog в Kedro — абстракция загрузки именованных наборов внутри проекта. Корпоративный каталог метаданных с происхождением и правами доступа решается отдельным классом задач.

Kedro-Viz показывает граф конвейера. Он не проверяет, верно ли определена бизнес-сумма, поэтому арифметику закрывают тестами.

Исторические интеграции требуют осторожности. Документация Neptune для Kedro размещена на домене docs-legacy и описывает завершённый пример подключения: плагин kedro-neptune, инициализация командой kedro neptune init, специальный вход neptune_run в узле и запись метрик в пространство имён kedro. Этот исторический материал показывает устройство интеграции. Доступность сервиса для нового проекта нужно проверять отдельно.

Выбор между инструментами стоит делать по задаче. Если нужна организация Python-кода с явными зависимостями между шагами и отдельной конфигурацией загрузки, Kedro закрывает эту потребность. Если требуется встроенное расписание, его ищут в другом слое.

Частые вопросы

Что такое kedro python?
Kedro — открытый Python-фреймворк под лицензией Apache 2.0 для организации конвейеров данных и машинного обучения. Он задаёт структуру проекта, связывает узлы по именам наборов и выносит загрузку данных в YAML-конфигурацию. Работает как библиотека внутри обычного Python-проекта.

Какую версию Python поддерживает kedro python version?
Документация проекта не фиксирует одну версию в разобранных материалах. Разбор AWS написан для Python 3.7 и Kedro 0.16.5, поэтому его команды установки устарели. Актуальные требования к версии Python стоит сверять в текущей документации и в файле зависимостей созданного проекта.

Работает ли kedro python 3.14?
Подтверждения для этой версии в разобранных материалах нет. Практический путь — создать проект командой kedro new и посмотреть, какие версии пакетов подтянутся в requirements.txt. Если установка зависимостей проходит, проект запускается командой kedro run.

Как выглядит kedro python example?
Минимальный пример — две функции и два узла. Первая оставляет оплаченные заказы, вторая складывает суммы. Узлы связываются именами orders, paid_orders и paid_total, а проверка результата укладывается в assert total_amount(paid) == 170.

Чем kedro framework python отличается от библиотеки?
Kedro поставляется как Python-пакет и используется как библиотека. Дополнительно он приносит командную строку kedro, каркас проекта и конвенции раскладки файлов. Наборы данных при этом живут в отдельном пакете kedro-datasets, начиная с версии 0.19.0.

Читайте также

3 материала