Python для инженерии данных

Как инженер по данным, я не могу представить свою работу без Python. В этой статье я хотел бы поделиться своими мыслями о том, как Python облегчает мою работу, а в некоторых случаях вообще делает ее возможной. Python — один из самых популярных языков программирования во всем мире. Он часто занимает высокие места в опросах — например, он занял первое место в индексе «Популярность языков программирования» и второе место в индексе TIOBE.

В Stack Overflow, одном из самых авторитетных опросов разработчиков, Python неизменно занимает первое место; это самый востребованный и третий по популярности язык программирования по мнению респондентов в 2021 году.

Python также является основным языком для специалистов по работе с данными и отличной альтернативой специализированным языкам, таким как R для машинного обучения. Его часто называют языком данных, и он незаменим в области инженерии данных.
Инженерия данных в облаке
Повседневные задачи, стоящие перед инженерами по обработке данных, схожи с теми, с которыми сталкиваются специалисты по анализу данных. Обработка данных в различных формах находится в центре внимания обеих специализаций. Однако в контексте инженерии данных мы больше внимания уделяем промышленным процессам, таким как конвейеры данных и задания ETL (extract-transform-load). Они должны быть прочными, надежными и эффективными, независимо от того, предназначено ли решение для локальной или облачной платформы.

Когда речь идет об облаке, Python показал себя достаточно хорошо, чтобы побудить поставщиков облачных платформ использовать его для реализации и управления своими услугами. Если мы посмотрим на крупнейших игроков — Amazon Web Services (AWS), Google Cloud Platform (GCP) и Microsoft Azure — все они используют Python в своих решениях ряда проблем.

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

Python — один из немногих языков программирования, поддерживаемых сервисами бессерверных вычислений всех трех платформ (AWS Lambda Functions, GCP Cloud Functions и Azure Functions).

Параллельные вычисления, в свою очередь, необходимы для тяжелых ETL-задач по обработке больших данных. Разделение рабочих процессов преобразования между многими рабочими узлами является единственным возможным способом достижения цели с точки зрения памяти (когда данные не могут храниться в памяти на одной физической машине) и времени (когда последовательная обработка занимает слишком много времени).

Хотя Apache Spark в настоящее время является передовой технологией для параллелизма данных, обертка для движка Spark на языке Python под названием PySpark поддерживается AWS Elastic MapReduce (EMR), Dataproc для GCP и HDInsight для Azure.

Что касается контроля и управления ресурсами в облаке, то для каждой платформы разработаны соответствующие интерфейсы прикладного программирования (API).

API особенно полезны для программного получения данных или запуска заданий. API, разработанные AWS, GCP и Azure, удобно упакованы в SDK для Python: boto, google_cloud_* и azure-sdk-for-python, что делает их легко интегрируемыми в приложения на Python.

Таким образом, Python широко доступен на всех платформах облачных вычислений. Но этот язык также является полезным инструментом для выполнения работы инженера по данным, которая заключается в создании конвейеров данных и заданий ETL для получения данных из различных источников (забор), их обработки/агрегирования (преобразование) и, наконец, предоставления их пользователям, как правило, бизнес-аналитикам, специалистам по анализу данных и машинному обучению.

Фокус на вводе данных с помощью Python
Бизнес-данные могут поступать из различных источников разной природы, включая базы данных (как SQL, так и noSQL), плоские файлы (например, CSV), другие файлы, используемые компаниями (например, электронные таблицы), внешние системы, API и веб-документы.

Популярность Python как языка программирования приводит к обилию библиотек и модулей, включая те, которые используются для доступа к данным, например SQLAlchemy для некоторых баз данных SQL, Scrapy, Beautiful Soup, или Requests для данных с веб-источником, среди прочих.

Одной из особенно интересных библиотек является Pandas. Она позволяет считывать данные в «DataFrames» из множества различных форматов, включая CSV, TSV, JSON, XML, HTML, LaTeX, SQL, Microsoft, открытые электронные таблицы и некоторые другие бинарные форматы, которые являются результатами экспорта различных бизнес-систем.

Библиотека также поддерживает форматы, ориентированные на столбцы, включая Apache Parquet, что позволяет оптимизировать последующие запросы к этим данным с помощью таких инструментов, как AWS Athena.

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

AWS Labs поддерживает библиотеку aws-data-wrangler под названием «Pandas on AWS» для облегчения известных операций с фреймами данных на AWS. Пакет можно использовать, например, в качестве слоя для Lambda-функций, что значительно упрощает развертывание бессерверных функций.

Параллельные вычисления с PySpark
Apache Spark — это механизм с открытым исходным кодом для обработки огромных объемов данных, использующий принцип параллельных вычислений в высокоэффективном и отказоустойчивом виде. Хотя изначально он был реализован на языке Scala и изначально поддерживает этот язык, он имеет широко используемый интерфейс на языке Python: PySpark.

PySpark поддерживает большинство функций Spark, таких как Spark SQL, DataFrame, Streaming, MLlib (Machine Learning) и Spark Core. Это делает разработку ETL-заданий чрезвычайно простой для приверженцев Pandas.

Все платформы облачных вычислений, о которых я говорил выше, поддерживают PySpark: Elastic MapReduce (EMR), Dataproc и HDInsight для AWS, GCP и Azure соответственно. Кроме того, вы можете подключить Jupyter Notebook для облегчения разработки Python-кода распределенной обработки, например, с помощью встроенных поддерживаемых EMR Notebook в AWS.

Таким образом, PySpark является мощным инструментом для преобразования и агрегирования огромных объемов данных, делая их готовыми к потреблению конечными пользователями, например, бизнес-аналитиками, или дальнейшими компонентами, например, с привлечением машинного обучения.

Планирование заданий с помощью Apache Airflow
Наличие популярных и хорошо зарекомендовавших себя инструментов на базе Python в локальных системах побуждает поставщиков облачных платформ коммерциализировать их в виде «управляемых» услуг, которые, как следствие, проще в настройке и эксплуатации.

Это, в частности, относится к управляемым рабочим процессам для Apache Airflow от Amazon, которые были запущены в 2020 году и облегчают использование Airflow в некоторых зонах AWS (девять на момент написания статьи). Cloud Composer — это альтернатива GCP для управляемой службы Airflow.

Apache Airflow написан на языке Python и является платформой управления рабочими процессами с открытым исходным кодом. Она позволяет программно создавать и планировать последовательности обработки рабочих процессов, а затем контролировать их с помощью встроенного пользовательского интерфейса Airflow.

Логика преобразований и вызываемых субсервисов также реализована в Python. Огромным преимуществом для разработчиков является то, что они могут импортировать другие классы Python для расширения возможностей управления рабочими процессами.

Существует несколько альтернатив Airflow, включая Prefect и Dagster. Оба представляют собой основанные на Python орхистраторы рабочих процессов данных с пользовательским интерфейсом (в случае Dagster — через Dagit), используемым для построения, запуска и мониторинга конвейеров. Они направлены на решение некоторых проблем, возникающих у пользователей с Airflow, более популярным и известным предшественником. В обоих этих инструментах управление рабочими процессами может осуществляться с помощью Python.

Оцените статью
devanswers.ru
Добавить комментарий