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

✈ Кедро крючки введение – создание крючко-прелестного крюка

Кедро Крючки – это захватывающая предстоящая особенность Kedro 0.16.0. Они позволяют вам подключиться к каталогу … Теги с данными, Python, Kedro, наукой данных.

Kedro (18 частей серии)

Kedro Hooks – это захватывающая предстоящая особенность Kedro 0.16.0 . Они позволяют вам зацепить Catalog_created , Pipeline_Run и Node_Run (существительные). С до или после (имя прилагательное). Это действительно напоминает мне о реагистрации крючков жизненного цикла, которые позволяют подключить к различным состояниям реагирования веб-компонентов. Это собирается сделать KEDRO так расширимым по сообществу. Я супер закачил, чтобы увидеть, что сообщество умеет делать с этой способностью.

Что такое Kedro 🤔

Если вы полностью не уверены, что KEDRO обязательно проверит мой Что такое Kedro Почта

🤷♀️. Что такое Kedro (части)

Waylon Walker · 24 февраля · 3 мин прочитан

Работа в прогрессе

Поскольку это часть предстоящего выпуска, вам нужно будет посмотреть в Последние Документы, не Стабильный И вы найдете 15_hooks страница. Поскольку эти документы все еще в разработке, они не очень завершены на данный момент и требуют немного более существующих Кедро знания, чтобы понять. Я уверен, что они получит намного лучше, чем приближается к выпуску крючков.

Это не значит, что мы все еще не можем установить последнюю/нестабильную версию и повеселиться!

Прямо из Github

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

conda create -n kedro0160 -y
conda activate kedro0160 # may also be source activate kedro0160 or activate kedro0160
pip install git+https://github.com/quantumblacklabs/kedro.git
pip install colorama

Примечание Версия все еще где-то между 0.15.9 и 0,16,0. . Кедро. __Version__ все равно будет 0.15.9 И не будет катиться до официального выпуска.

Kedro New.

Для получения более подробной информации о моем полном посте на Kedro New.

🛢reate новый конвейер Kedro (KEDRO NEW)

Waylon Walker · 2 · 4 мин читать

Для этого поста я действительно просто хочу работать рабочий конвейер как можно быстрее. Для этого я собираюсь использовать трубопровод IRIS, который генерируется из Kedro New Команда в CLI. Это важно что вы отвечаете y создать пример трубопровода.

Держать на ✋

Вы создали отдельную среду для этого? Пожалуйста, сделай.

kedro new

После того, как вы запустите Kedro New Команда это спросит ряд вопросов.

👇 Вот как я их ответил.

Project Name:
=============
Please enter a human readable name for your new project.
Spaces and punctuation are allowed.
 [New Kedro Project]: Kedro Hooks
Repository Name:
================
Please enter a directory name for your new project repository.
Alphanumeric characters, hyphens and underscores are allowed.
Lowercase is recommended.
 [kedro-hooks]:
Python Package Name:
====================
Please enter a valid Python package name for your project package.
Alphanumeric characters and underscores are allowed.
Lowercase is recommended. Package name must start with a letter or underscore.
 [kedro_hooks]:
Generate Example Pipeline:
==========================
Do you want to generate an example pipeline in your project?
Good for first-time users. (default=N)
 [y/N]: y
Change directory to the project generated in /mnt/c/temp/kedro-hooks/
A best-practice setup includes initialising git and creating a virtual environment before running `kedro install` to install project-specific dependencies. Refer to the Kedro documentation: https://kedro.readthedocs.io/

Установите проект

Затем установите сам проект и все его зависимости с KEDRO Установить команда.

cd kedro-hooks
kedro install

🏃♀️. Запускать трубопровод

Прежде чем мы начнем разработать какие-либо крючки, давайте убедитесь, что все настроено правильно, запустив трубопровод с Kedro Run. .

kedro run

добраться до мяса поста

Теперь, когда у нас есть проект и работает, мы можем разработать крючок для него. Насколько я могу сказать крючки, может быть реализован один из Два способа Отказ Как Функция Внутри модуля, затем импортируйте этот модуль и передайте его в список крючков или реализован как метод на класс Затем класс передан в список крючков. Любой способ должен следовать следующему соглашению об именах с помощью @hook_impl декоратор. Каждый модуль/класс может реализовать более одного крючка, но не более одного типа. Один из каждого вида будет создан ниже.

Полный список доступных крючков

до_catalog_created

all_catalog_created.

до_pipilely_Run.

After_pipilen_Run.

до_node_Run.

After_node_Run.

быстро и грязно

Я настоятельно рекомендую это как ваш первый крюк. Супер легко сделать и позволяет вам исследовать аргументы, переданные в крючок. Для этого я собираюсь попнуть следующий класс прямо в Кедро-крючки/SRC/Kedro-крючки/Run.py , помните, что я выбрал Кедро-крючки как мое название проекта. Ваш путь может быть немного другим. Если вы хотите сделать настоящий крючок, это может иметь смысл поместить его в свой собственный модуль, но для простоты вашего первого крючка вы можете поставить его непосредственно в том же модуле, который он реализован.

class debug_hook:
    @hook_impl
    def before_pipeline_run(run_params, pipeline, catalog):
        "pops into a debugger before pipeline run"
        print('I hooked in right before the pipeline run')
        breakpoint()

Это действительно так просто создать крючок Kedro! Теперь давайте применим его к нашему проекту. Все, что нам нужно сделать, это добавить одну строку ( крючки = [Debug_Hook] ) к существующему ProjectContext класс внутри Кедро-крючки/SRC/Kedro-крючки/Run.py . Как только мы сделаем это наше ProjectContext будет выглядеть так.

class ProjectContext(KedroContext):
    """Users can override the remaining methods from the parent class here,
    or create new ones (e.g. as required by plugins)
    """

    project_name = "kedro-hooks"
    # `project_version` is the version of kedro used to generate the project
    project_version = "0.15.9"
    package_name = "kedro-hooks"

    hooks = [debug_hook] # 👈 This is where you implement the hook

    def _get_pipelines(self) -> Dict[str, Pipeline]:
        return create_pipelines()

Запустить его! Пока вы в отладчике, изучите, что run_params. , трубопровод и Каталог Аргументы дают вам. Это даст вам некоторое понимание того, что ожидать при создании следующего крюка.

давая ему немного больше

Создайте новый файл Кедро-крюки/SRC/KEDRO-Крюки/Preflight.py и поместите следующий контент в файл. Это поднимет DataSetnotfoundError Перед тем как тратить время на любой из трубопровода. Это может быть полезно сэкономить некоторое время разработчика для длительных трубопроводов, предупреждая их, что у них нет всех необходимых им необработанных данных перед запуском.

# kedro-hooks/src/kedro-hooks/preflight.py
from kedro.hooks import hook_impl
from kedro.io.core import DataSetNotFoundError
from colorama import Fore
import textwrap

@hook_impl
def before_pipeline_run(run_params, pipeline, catalog):
    missing_input = [i for i in pipeline.inputs() if not getattr(catalog.datasets, i)._exists()]
    if len(missing_input) != 0:
        raise DataSetNotFoundError(textwrap.dedent(f'''

    {Fore.LIGHTBLACK_EX}―――――――― {Fore.RED}PREFLIGHT ERROR {Fore.LIGHTBLACK_EX}―――――――――
    {Fore.RESET} preflight of pipeline failed due to {Fore.YELLOW}missing datasets
    {Fore.BLUE} {missing_input}{Fore.RESET}
    '''))

Как только мы довольны этим крюком, он может жить где угодно. Это может быть модуль внутри нашего проекта. Это может быть отдельную библиотеку, которая раздается в качестве заднего колеса союзника, или мы можем даже опубликовать его как свой собственный пакет для Pypi, чтобы любой мог легко установить его.

Один шаг назад

Немного объяснения прелестного

Если вы не знакомы, трубопровод. INPUTS () Дает нам все краевые входы в трубопровод. Kedro также имеет Pipeline.all_inputs () Это рассказывает нам все преимущественные и внутренние входы трубопроводов, которые будут называться по всему трубопроводу. Для этого крючка мы просто обеспокоены краевыми входами, так как внутренние входы будут сгенерированы во время прогона.

Также каждый из наборов Kedro есть _Exists () Метод прикреплен к ним, чтобы проверить, существует ли набор данных или нет. Для более надежной реализации прелесть Вероятно, было бы лучше проигнорировать AttributeError S, I.e Тип набора данных не имеет реализации _существуют . Вероятно, это также будет хорошая идея для фильтрации для таких типов, как Sqlquerydataset. S, что предполагает _Exists является ложным по умолчанию.

Теперь, когда соки течь, какие идеи у вас есть для Кедро Крючки?

Kedro (18 частей серии)

Оригинал: “https://dev.to/waylonwalker/creating-the-kedro-preflight-hook-29f2”