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

4 способа эффективно отладки трубопроводов передачи данных с использованием пучка Python и Apache

Beam Apache – это рамка с открытым исходным кодом, которая полезна для очистки и обработки данных в масштабе. Это… Теги с Python, наукой данных, машиной обучения, луча Apache.

Beam Apache – это рамка с открытым исходным кодом, которая полезна для очистки и обработки данных в масштабе. Это также полезно для обработки потоковых данных в режиме реального времени. Фактически, вы даже можете развиваться в Beam Apache на вашем ноутбуке и развернуть его в Google Cloud для обработки (версия Google Cloud называется DataFlow).

Помимо этого луча касается мира искусственного интеллекта. Более формально, он используется в качестве части машинного обучающих трубопроводов или в автоматическом развертывании моделей машинного обучения (MLOPS). В качестве конкретного примера можно использовать пучок для очистки ошибок орфографии или пунктуации из данных Twitter, прежде чем данные отправляются в модель машинного обучения, которая определяет, если Tweet представляет собой эмоцию, счастливые или грустные.

Одна из проблем, хотя при работе с лучом – это то, как подходить к отладке Python, который используется для создания трубопроводов данных и как отладки основных функций на вашем ноутбуке. В этом посте блога я собираюсь показать вам 4 способа, которые могут помочь вам улучшить отладку.

Быстрое примечание: Этот блог дает обзор высокого уровня того, как отладки трубопроводов данных. Для более глубокого погружения вы можете проверить Это видео Что рассказывает о неисполнениях с лучом Apache и Это видео который проходит вас через процесс отладки для базового конвейера данных.

1) Только запускать тесты по трудоемким по времени, если установлены зависимые библиотеки

try:
    from apitools.base.py.exceptions import HttpError
except ImportError:
    HttpError = None


@unittest.skipIf(HttpError is None,
 'GCP dependencies are not installed')
class TestBeam(unittest.TestCase):

Если вы используете Unittest, полезно иметь тест, который работает только в том случае, если установлены правильные библиотеки. В приведенном выше примере Python у меня есть блок попробовать, который ищет класс в библиотеке Google Cloud. Если класс не найден, тест устройства пропускается, и отображается сообщение, в котором говорится, что «зависимости GCP не устанавливаются».

2) Используйте TestPipeline при запуске локального устройства тесты

Beam Apache использует объект трубопровода для того, чтобы помочь построить направленный ациклический граф (DAG) преобразований. Если вы используете тесты, вы также можете использовать Apache_Beam .testing. TestPipine.

Пример направленного ациклического графа

3) скобки полезны

Документация опорных луче говорят об использовании цикла «с« с », чтобы каждый раз вы преобразуете свои данные, вы делаете это в контексте трубопровода. Пример Python Pseudo-код может выглядеть следующее:

With beam.Pipeline(…)as p:
    emails = p | 'CreateEmails' >> beam.Create(self.emails_list) 
    phones = p | 'CreatePhones' >> beam.Create(self.phones_list) 
    ...

Также может быть полезно построить преобразование без «с блоком». Модифицированный псевдокод тогда выглядит так:

emails_list = [
            ('amy', 'amy@example.com'),
            ('carl', 'carl@example.com'),
            ('julia', 'julia@example.com'),
            ('carl', 'carl@email.com'),
        ]

phones_list = [
    ('amy', '111-222-3333'),
    ('james', '222-333-4444'),
    ('amy', '333-444-5555'),
    ('carl', '444-555-6666'),
]

p = beam.Pipeline(...)

def list_to_pcollection(a_pipeline, a_list_in_memory, a_label):
    # () are required to span multiple lines
    return ( a_pipeline | a_label >> beam.Create(a_list_in_memory) )


emails = list_to_pcollection(p, emails_list, 'CreateEmails')
phones = list_to_pcollection(p, phones_list, 'CreatePhones')

В любом случае («Использование блока» или пропуская блок), скобки – ваш друг.

Поскольку луч может сделать «композитные преобразования», где одна преобразование «цепочки» к следующему, несколько строк для преобразований вполне вероятно. Как видно в приведенном выше примере, когда у вас есть несколько строк, вам нужно иметь в скобках, либо иметь символ продолжения линии («\»).

4) Использование этикеток рекомендуется, но каждая метка должна быть уникальной

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

Различные этапы обработки в Dataflow

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

p = beam.Pipeline(...)

def list_to_pcollection(a_pipeline, a_list_in_memory, a_label):
    # () are required when there is no WITH loop
    return ( a_pipeline | a_label >> beam.Create(a_list_in_memory) )


emails = list_to_pcollection(p, emails_list, 'CreateEmails')
# The line below would cause a failure because labels must be unique
phones = list_to_pcollection(p, phones_list, 'CreateEmails')

Однако следующий код будет работать:

index = 1
a_label = "create" + str(index)
emails = list_to_pcollection(p, emails_list, a_label)
index = index + 1
a_label = "create" + str(index)
phones = list_to_pcollection(p, phones_list, a_label)

Суть в том, что если вы программно создаете этикетки, вам необходимо убедиться, что они уникальны.

РЕЗЮМЕ

В этом посте мы рассмотрели 4 способа, которые должны помочь вам с отладкой. Чтобы поставить все в контексте, рассмотрите следующее:

1. Тест, чтобы увидеть, что ваши зависимые библиотеки установлены:

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

2. Используйте TestPipeline при работе локальных испытаний:

В отличие от Apache_beam. Трубопровод, TestPipeline может обрабатывать настройки трубопроводности внутри. Это означает, что есть меньшая конфигурация, чтобы получить код тестирования устройства, а меньшая конфигурация обычно означает сохранение времени.

3. Скобки полезны:

Поскольку PC Placollections может делать несколько преобразований все сразу («Составное преобразование»), вполне вероятно, что преобразования будут проходить несколько строк. Когда скобки используются с этими несколькими линиями, вам не нужно беспокоиться о забывающих символов продолжения линии.

4. Использование этикеток рекомендуется, но каждая метка должна быть уникальной:

Использование ярлыков для шагов в вашем трубопроводе имеет решающее значение. Когда вы развертываете свой балковый трубопровод в Google Cloud, вы можете заметить шаг, который не соответствует требованиям к производительности, и метка поможет вам быстро идентифицировать проблемный код.

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

СЛЕДУЮЩИЕ ШАГИ

ОК – это 4 шага, которые, надеюсь, должны улучшить ваш опыт отладки. Для получения дополнительной информации о том, как обработать данные в режиме реального времени и для получения информации о том, как развернуть модели обучения машин в производство, я призываю вас взглянуть на новый Машинное обучение Mastery Курс, что белое совое образование собирает вместе.

Оригинал: “https://dev.to/ralphbrooks/4-ways-to-effectively-debug-data-pipelines-using-python-and-apache-beam-53c6”