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”