Рубрики
Без рубрики

Проектирование «маршрутизатора» для kedro

NODES_GLOBAL Я выпустил плагин, похожий на маршрутизатор, для KEDRO еще в апреле 2020 года. Это было не … Помечено с данными, DataScience, Python, Kedro.

nodes_global

В апреле 2020 года я выпустил плагин, похожий на маршрутизатор, еще в апреле 2020 года. Это был не первый дизайн, идея на самом деле пришла от одного из людей QB, который научил меня Кедро почти год назад. Мы собирали наши трубопроводы с чем -то под названием NODES_GLOBAL Анкет Это сработало довольно хорошо, но у него были некоторые проблемы с тем, что они были установлены в качестве глобальной переменной.

Но…

В частности, в частности, что он не поддался хорошо, это возможность создать упакованный трубопровод, который я мог бы установить и добавить в любой из моих существующих трубопроводов. Что -то, что я все еще пытаюсь тренироваться, может быть, мне это не нужно. Я думаю, что у меня есть это работа для наших внутренних трубопроводов, и кажется, что это путь, но мы не обязательно используем его.

Также…

С помощью этого шаблона все узлы должны быть импортированы с помощью модуля, содержащего NODES_GLOBAL. Я считаю, что это становится большим препятствием для новых трубопроводов, поступающих от Юпитера, чтобы преодолеть, и может быть наиболее приводимым, когда их узлы не бегают после того, как они добавили их.

Если вы немного не уверены в том, что такое Kedro, обязательно проверьте мой что-то-кедро статья.

@узел,)

Я отправился в разработку чего-то, что было похоже на колб. Около ноября у меня было что -то работающее. Вы можете просто начать создавать функции. и украсьте эти функции декоратором, как с колбой. У меня даже было настроение, чтобы автоматическое название узлов, таких как create_b_int_cars .

Но….

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

Pytest вдохновил

простота

Окончательный дизайн в итоге был предложен моим коллегой, который не использует KEDRO, но является блестящим Dev Python. Идея заключалась в том, чтобы пройти через проект, как Pytest, поиск модулей и переменных с определенным шаблоном ( node , или Pipeline ).

Я использую это с апреля и мне это нравится. У него очень мало изменений с момента первого релиза. Когда я создаю новый модуль, это автоматически становится новым трубопроводом в моем трубопроводы DICT и все переменные с помощью узла имени выровняются и помещают в один трубопровод.

Подходит для новичков

Как и с Pytest. Вы просто начинаете взлом в модулях, заканчивающихся _nodes.py с узлами в них, и они просто появляются в вашем последнем трубопроводе.

Как это использовать

readme Имеет несколько отличных примеров.

Установите его

pip install find-kedro

Включить это

Включите это, изменив одну строку в run.py

run.py

from kedro.context import KedroContext
from find_kedro import find_kedro

class ProjectContext(KedroContext):
    def _get_pipelines(self) -> Pipeline:
        return find_kedro()

Или если вы используете новый Hooks.py метод Опять же, не нужно импортировать все ваши узлы.

hooks.py

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.
        """

        return find_kedro()

Используй это

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

_ мой _nodes.py_

# my-proj/pipelinies/data_engineering/pipeline
from kedro.pipeline import node
from .nodes import split_data

nodes = []

def split_data(df: pd.DataFrame, ratio: float) -> Dict[str, pd.DataFrame]:
   ...

nodes.append(
    node(
        split_data,
        ["example_iris_data", "params:example_test_data_ratio"],
        dict(
            train_x="example_train_x",
            train_y="example_train_y",
            test_x="example_test_x",
            test_y="example_test_y",
        ),
    )
)

Если вы все еще не пробовали Kedro, это проще, чем вы думаете. Проверьте Create-New-Kedro-Project Чтобы получить проект, начался всего за несколько минут.

Я писал короткие фрагменты о том, что мой менталитет врывается в индустрию технологий/данных в моей новостной рассылке, 👉 Проверьте это и давайте запустим разговор.
👀 Смотрите вопрос, отредактируйте этот пост на GitHub

Оригинал: “https://dev.to/waylonwalker/designing-a-router-for-kedro-216”