Наука о данных приобретает видную роль в производственных конвейерах на технологической арене, и понятно почему. Специалисты по обработке данных предоставляют группам разработчиков системы моделирования и анализа данных, которые обеспечивают ценную обратную связь по собранным данным для улучшения продукта. В мире больших данных моделирование и анализ данных необходимы для роста и успеха предприятий практически во всех секторах.
Сама по себе наука о данных — только вспомогательная роль. Он предоставляет данные и выводы в понятной форме. Итак, как нам превратить этот процесс из вспомогательной роли в упреждающую, способствующую решению проблем? Именно здесь на помощь приходит прикладная наука о данных. Если вы специалист по данным, интересующийся облачными услугами или услугами прогнозных моделей для продуктовых групп, вы попали в нужное место.
Сегодня мы узнаем о роли прикладной науки о данных в технологиях. Мы обсудим популярные инструменты, которые вам понадобятся как специалисту по прикладным данным, а именно PySpark и бессерверные функции в Google Cloud и AWS. Затем мы построим масштабируемый конвейер облачной модели.
В этой статье предполагается, что читатель имеет опыт работы с Python и наукой о данных. Прежде чем продолжить, ознакомьтесь с основами.
- Что такое прикладная наука о данных?
- Для чего используется прикладная наука о данных?
- Инструменты прикладной науки о данных
- Python
- Jupyter Notebooks
- Kaggle
- BigQuery
- Pandas
- PySpark и Apache Spark
- Облачные платформы: AWS, Azure и GCP
- Бессерверные функции и наука о данных
- Преимущества бессерверных функций
- Бессерверные функции AWS: Lambda
- Как создать эхо-функцию в AWS Lambda
- Простая служба хранения (S3)
- Как настроить ведро S3
- Как определить пользователя в S3
- Как предоставить пользователю доступ к корзине S3
- Облачные функции Google: бессерверные функции Google
- Как создать эхо-сервис в GCP
- Развертывание нашей функции
- Тестирование нашей функции
- Тестирование HTTP-вызовов
- Облачное хранилище Google (GCS)
- Как создать ведро в GCS
- Как сохранить файл в GCS
- Как скачать с GCS
- Представляем модельные конвейеры
- Что такое конвейеры пакетной модели?
- Какие инструменты мы используем для пакетных моделей конвейеров?
- PySpark для пакетных конвейеров
- Лучшие практики PySpark
- PySpark учебник для прикладной науки о данных
- Форматы файлов PySpark
- Avro
- Parquet
- ORC
- CSV
Что такое прикладная наука о данных?
Прикладная наука о данных — это процесс использования принципов науки о данных для ответа на вопросы бизнеса и создания масштабируемых систем, которые делают прогнозы продуктов на основе прошлых данных.
Основное различие между наукой о данных и прикладной наукой о данных заключается в том, на чем заканчивается их опыт. И специалисты по данным, и специалисты по прикладным данным сосредоточены на отслеживании тенденций данных и создании визуализаций. Но специалисты по прикладным данным выходят за рамки этого, чтобы сосредоточиться на реальных приложениях, которые консультируют предприятия о том, что им делать с их результатами.
Прикладная наука о данных существует на стыке инженерии машинного обучения (ML) и науки о данных. Специалисты по прикладным данным сосредоточены на создании продуктов данных, которые могут интегрировать продуктовые группы. Например, ученый-прикладник в издательстве игр может создать сервис рекомендаций, который различные игровые команды могут интегрировать в свои продукты. Обычно эта роль является частью центральной группы, которая отвечает за владение информационным продуктом.
Для чего используется прикладная наука о данных?
Прикладная наука о данных используется для создания перспективных программ решения проблем с использованием систем машинного обучения. Эти системы обрабатывают массу больших данных и используют прогнозную аналитику, чтобы делать выводы на будущее. Системы машинного обучения могут даже увидеть тенденции, слишком незаметные для исследователя данных.
Хорошо спроектированные программы анализа данных машинного обучения также масштабируемы, а это означает, что работа одного специалиста по прикладным данным может быть широко использована в интересах нескольких групп разработчиков.
Прогнозы на основе данных позволяют командам делать упреждающий выбор для максимизации прибыли там, где они обычно не могли. Например, специалист по прикладным данным может создать программу, которая отслеживает поведение на вашем сайте с подпиской, такое как время сеанса, посещения в неделю и т. Д., Чтобы предсказать, когда подписчик собирается отменить свою подписку.
В ответ на это продуктовая группа могла отправить подписчику специальную сделку или рекламную акцию, чтобы побудить его остаться подписчиком. Без прикладной науки о данных этот прогноз был бы невозможен, и команда не смогла бы действовать упреждающе, чтобы удержать своего клиента.
Инструменты прикладной науки о данных
Специалисты по прикладным данным используют множество различных инструментов для выполнения своих разнообразных обязанностей. Ниже кратко рассмотрим каждый из них и его роль в этом процессе:
Python
Python — наиболее широко используемый язык программирования для науки о данных. Благодаря своим огромным библиотекам, наполненным функциями манипулирования данными, его гибкости и относительной простоте изучения Python быстро стал отраслевым стандартом. Обычные среды для работы — это простые текстовые редакторы, ноутбуки или удаленные среды ноутбуков, такие как Amazon EC2.
Jupyter Notebooks
Project Jupyter — это некоммерческая организация, деятельность которой направлена на создание общедоступных сред с открытым исходным кодом на разных языках программирования. Многие специалисты по обработке данных используют записные книжки Jupyter в качестве среды Python, которую они предпочитают, поскольку она эффективна для быстрой загрузки и использования данных из любой точки мира. Совместное использование блокнотов и данных с Jupyter очень просто. Это позволяет специалистам по обработке данных делиться выводами и методами коллективного расширения возможностей науки о данных.
Kaggle
Kaggle — это онлайн-коллекция общедоступных наборов данных и записных книжек, обнаруженных и совместно используемых другими специалистами по данным. Цель Kaggle — повысить доступность обнаруженных методов науки о данных и больших данных в качестве общего ресурса для всех специалистов по данным. Он может напрямую взаимодействовать с Jupyter для импорта данных и имеет ресурсы, помогающие с Pandas, машинным обучением, глубоким обучением и многим другим.
BigQuery
BigQuery — это безсерверное масштабируемое онлайн-хранилище больших наборов данных, которые можно использовать в коде, помещая запросы в код Python. Разница между Kaggle и BigQuery заключается в том, что Kaggle содержит программы, созданные специалистами по данным, и данные, которые они использовали, в то время как BigQuery просто содержит массу данных. Преимущество запроса данных заключается в том, что он позволяет вам использовать данные без необходимости загружать и хранить такие большие коллекции на вашем локальном компьютере.
Pandas
Pandas — это программная библиотека, написанная для Python, которая содержит дополнительные структуры и операции для обработки и анализа данных. Это особенно полезно для специалистов по данным, поскольку Pandas специализируется на работе с числовыми таблицами и временными рядами, которые являются распространенными формами данных в мире науки о данных. Pandas также действует как посредник для вызова больших наборов данных из интернет-коллекций, таких как Kaggle и BigQuery.
PySpark и Apache Spark
PySpark — это Python API для поддержки Apache Spark. Apache Spark — это распределенная структура, предназначенная для анализа больших данных. Spark действует как большой вычислительный механизм, который может обрабатывать огромные наборы данных с помощью систем параллельной обработки и пакетной обработки. Используя эти аутсорсинговые системы, группы по анализу данных могут получить возможность использовать распределенную структуру без необходимости в дорогостоящих командах инженеров и оборудовании.
Облачные платформы: AWS, Azure и GCP
Одна из причин, по которой специалисты по прикладным данным могут создавать такие масштабируемые решения, — это активное использование технологий облачных вычислений, таких как Amazon AWS и Google Cloud Platform от Google. Эти платформы предоставляют специалистам по прикладным данным доступ к возможностям автоматического масштабирования и к куче больших данных, которые слишком громоздки для хранения на локальных дисках.
Теперь давайте узнаем больше о самой выгодной технологии облачных вычислений для специалистов по данным: бессерверных функциях.
Бессерверные функции и наука о данных
Бессерверные функции являются основным инструментом для специалистов по прикладным данным. Это тип программного обеспечения, которое работает в размещенной среде, поддерживаемой компанией, занимающейся облачными вычислениями, например Amazon или Google.
Бессерверные функции настроены так, чтобы реагировать на определенные события, такие как HTTP-запрос, и отвечать запрограммированным ответом, например, отправкой пакетов данных. Существует две основные среды для работы с бессерверными функциями: AWS Lambda и Google Platform Cloud Functions. Мы обсудим их каждый ниже.
Преимущества бессерверных функций
Бессерверные функции используются специалистами по обработке данных, потому что эти функции очень масштабируемы. С помощью бессерверных технологий поставщик облачных услуг управляет выделением серверов, масштабирует машины, управляет балансировщиками нагрузки и управляет версиями.
Передача этих обязанностей поставщику облачных услуг позволяет специалистам по обработке данных меньше уделять внимания операционным проблемам и быть более активными в DevOps. Это также позволяет масштабировать решение одного специалиста по данным без помощи команды разработчиков инфраструктуры.
Бессерверные функции AWS: Lambda
AWS Lambda — это сервис бессерверных вычислений или FaaS (функция как услуга), предоставляемый Amazon Web Services. Это один из самых популярных сервисов бессерверных вычислений, поскольку его можно использовать вместе со многими языками программирования и он может обрабатывать неограниченное количество функций для каждого проекта.
Lambda поддерживает широкий спектр потенциальных триггеров, включая входящие HTTP-запросы, сообщения из очереди, электронные письма клиентов, изменения в записях базы данных и многое другое.
Как создать эхо-функцию в AWS Lambda
Эхо-функция — это простая функция AWS, которая возвращает содержимое триггерного события, отправленного в программу. Это обычно используется в прикладной науке о данных для тестирования и отладки систем, отслеживая, какое событие запускает систему. С помощью простой эхо-программы специалист по данным может определить, на каком этапе возникает ошибка или правильно ли получен и обработан триггер события.
В этом примере будет использоваться Databricks Community Edition, бесплатная среда для ноутбуков для использования с AWS, GCP, PySpark и другими. Вы можете скачать его на веб-сайте Databricks, чтобы следовать всем нашим примерам в будущем.
Ниже мы создадим эту функцию с помощью AWS Lambda. Чтобы продолжить, выполните следующие действия в своей версии Databricks:
- В разделе «Найти службы» выберите «Лямбда».
- Выберите «Создать функцию».
- Используйте «Автор с нуля».
- Присвойте имя (например, эхо).
- Выберите среду выполнения Python.
- Нажмите «Создать функцию».
После выполнения этих шагов Lambda сгенерирует файл с именем lambda_function.py. Файл определяет вызываемую функцию lambda_handler, которую мы будем использовать для реализации эхо-службы. Мы внесем небольшие изменения в этот файл, как показано ниже, чтобы он повторял содержимое msgотправленного ему триггера.
def lambda_handler(event, context): return { 'statusCode': 200, 'body': event['msg'] }
Нажмите «Сохранить», чтобы развернуть функцию, а затем нажмите «Тест», чтобы протестировать файл. Если вы используете параметры теста по умолчанию, при запуске функции будет возвращена ошибка, поскольку msgв объекте события нет ключа. Щелкните «Настроить тестовое событие» и определите следующую конфигурацию:
{ "msg": "Hello from Lambda!" }
Теперь наша простая функция эха работает на AWS Lambda. Благодаря автоматическому масштабированию AWS мы можем быть уверены, что это удовлетворит любой уровень спроса и не требует мониторинга.
Простая служба хранения (S3)
Simple Storage Service (S3) — это уровень хранения, предоставляемый AWS, и широко популярная функция этого облачного сервиса. S3 действует как огромная надежная хеш-таблица, хранящаяся в облаке, в которой может размещаться что угодно, от отдельных файлов для веб-сайтов до миллионов файлов для озер данных.
Хотя AWS предлагает множество других решений для хранения данных, S3 является наиболее популярным. Все данные S3 находятся в одном «озере данных», что означает отсутствие аппаратных барьеров между данными одной компании и данными другой.
Изменяя разрешения, специалист по данным может предоставить или получить доступ к любым другим данным, хранящимся на S3. Простота обмена данными и надежность S3 делают этот инструмент неотъемлемой частью жизни специалиста по данным.
Ниже мы рассмотрим основы использования S3 для анализа данных в производственной среде. Чтобы использовать S3 для хранения нашей функции для развертывания, нам понадобится новая корзина S3, политика для доступа к ней и учетные данные для настройки доступа к командной строке. Сегменты в S3 аналогичны сегментам GCS в GCP.
Давайте узнаем, как настроить корзину, определить пользователя и предоставить этому пользователю доступ к нашей корзине:
Как настроить ведро S3
S3 использует многоуровневую систему для упорядочивания и сопряжения данных в большом озере данных. Первый уровень — это проект, который можно рассматривать как всеобъемлющую папку, содержащую все нижние элементы. Один пользователь может иметь несколько проектов в своей учетной записи. После этого проекты разбиваются на сегменты, которые действуют как подпапки для хранения связанных или взаимодействующих объектов и функций.
Каждая учетная запись по умолчанию может содержать до 100 корзин, а каждая корзина может содержать до 100 элементов. Сегменты не могут передаваться между учетными записями, но могут быть предоставлены другим пользователям через точки доступа.
Чтобы настроить корзину, перейдите в консоль AWS и выберите «S3» под поиском сервисов. Затем выберите «Создать корзину», чтобы указать место для хранения файлов на S3. Создайте уникальное имя для корзины S3, как показано на рисунке ниже, и нажмите «Далее». Наконец, нажмите «Create Bucket», чтобы завершить настройку корзины.
Как определить пользователя в S3
Прежде чем к нашей корзине можно будет получить доступ, нам нужно создать пользователя, которому могут быть предоставлены разрешения.
В консоли AWS выберите «IAM» в разделе «Найти службы». Затем нажмите «Пользователи», а затем «Добавить пользователя», чтобы создать нового пользователя. Создайте имя пользователя и выберите «Программный доступ», как показано ниже:
Как предоставить пользователю доступ к корзине S3
Следующий шаг — предоставить этому пользователю полный доступ к нашей корзине S3. Сначала используйте параметр «Присоединить существующие политики» и выполните поиск политик S3, чтобы найти и выбрать AmazonS3FullAccessполитику, как показано на рисунке ниже. Нажмите «Далее», чтобы продолжить процесс, пока не будет определен новый пользователь.
В конце этого процесса будет отображен набор учетных данных, включая идентификатор ключа доступа и секретный ключ доступа. Сохраните эти значения в надежном месте.
Наконец, мы должны запустить команду aws configureи, aws s3 lsчтобы проверить, что учетные данные пользователя имеют соответствующие разрешения:
aws configure aws s3 ls
Теперь наша корзина S3 настроена и имеет доступ к командной строке! Вы узнаете, все ли работает должным образом, если в результатах будет указано имя корзины S3, которую мы создали в начале этого раздела.
Дополнительные концепции AWS для изучения
Теперь у вас есть хорошая основа для изучения дополнительных функций и возможностей AWS Lambda. Вот несколько тем, над которыми стоит подумать, чтобы продолжить обучение AWS:
- Функции прогнозной модели в Lambda
- Определение шлюзов API с использованием Lambda
- Определение зависимостей Lambda
Облачные функции Google: бессерверные функции Google
Для прикладных специалистов по данным другая основная используемая бессерверная среда — это Google Cloud Platform, где мы можем создавать облачные функции, которые работают так же, как Lambda сверху. GCP — хорошая стартовая платформа, так как она похожа на стандартную разработку на Python.
При этом у GCP есть несколько недостатков, таких как:
- Нет эластичного облачного хранилища
- Хранилище не является интуитивно понятным, поскольку облачные функции доступны только для чтения, а пользователи могут только писать в \tmpкаталог.
- Использование пробелов вместо отступов для форматирования может вызвать крупномасштабные проблемы.
- Менее отзывчивые команды поддержки при возникновении проблем
- Излишне многословная документация и API
Многие разработчики согласны с тем, что лучше разрабатывать код GCP позже, используя его во Flask Python, поскольку это позволяет вам использовать преимущества GCP, а также получить доступ к эластичному облачному хранилищу.
Как создать эхо-сервис в GCP
Ниже мы создадим еще один эхо-сервис, на этот раз в GCP. GCP предоставляет веб-интерфейс для создания облачных функций. Этот пользовательский интерфейс предлагает параметры для настройки триггеров функции, определения требований для функции Python и разработки реализации функции Flask. Посмотрим, как это делается.
Настройка нашей среды
Сначала мы настроим нашу среду, выполнив следующие действия:
- Выполните поиск по запросу «Облачная функция».
- Щелкните «Создать функцию».
- Выберите «HTTP» в качестве триггера.
- Выберите «Разрешить вызовы без аутентификации».
- Выберите «Встроенный редактор» для исходного кода.
- Выберите Python 3.7 в качестве среды выполнения.
- Напишите имя вашей функции в поле «Функция для выполнения».
После выполнения этих шагов, пользовательский интерфейс обеспечит вкладки для main.pyи requirements.txtфайлов. В файле требований мы будем указывать библиотеки, такие как flask >= 1.1.1, а в основном файле мы реализуем поведение нашей функции.
Развертывание нашей функции
Теперь, когда наша среда настроена, мы можем начать работу над нашей программой. Мы собираемся создать простую функцию эха, которая анализирует msgпараметр из переданного запроса и возвращает этот параметр в виде ответа JSON. Чтобы использовать jsonifyфункцию, нам нужно сначала включить flaskбиблиотеку в requirements.txtфайл.
requirements.txtФайл и main.pyфайлы для простой функции эхо оба показаны на фрагменте кода ниже.
# requirements.txt flask #main.py def echo(request): from flask import jsonify data = {"success": False} params = request.get_json() if "msg" in params: data["response"] = str(params['msg']) data["success"] = True return jsonify(data)
Тестирование нашей функции
Теперь щелкните имя функции в консоли, а затем щелкните вкладку «Тестирование», чтобы проверить, сработало ли развертывание функции должным образом.
Вы можете указать объект JSON для передачи функции и вызвать функцию, щелкнув «Проверить функцию», как показано на рисунке ниже.
Результатом этого теста является объект JSON, возвращенный в диалоговом окне «Вывод», который показывает, что вызов функции эха работал правильно.
Тестирование HTTP-вызовов
Теперь, когда функция развернута и мы включили неаутентифицированный доступ к функции, мы можем вызывать функцию через Интернет с помощью Python. Чтобы получить URL-адрес функции, щелкните вкладку «Триггер». Затем мы можем использовать библиотеку запросов для передачи объекта JSON бессерверной функции, как показано во фрагменте ниже.
import requests result = requests.post( "https://us-central1-gameanalytics.cloudfunctions.net/echo" ,json = { 'msg': 'Hello from Cloud Function' }) print(result.json())
Результатом выполнения этого сценария является полезная нагрузка JSON, возвращаемая бессерверной функцией. Результатом вызова является JSON, показанный ниже:
{ 'response': 'Hello from Cloud Function', 'success': True }
Облачное хранилище Google (GCS)
Google Cloud Storage — еще одно программное обеспечение для облачного хранилища, которое работает аналогично AWS S3. S3 превосходит GCS как по задержке, так и по доступности. Однако GCS поддерживает значительно более высокую пропускную способность загрузки.
Ниже мы увидим, как можно использовать GCS для создания корзины и сохранения файла. Мы также узнаем, как загрузить файл модели из GCS.
Хотя GCP действительно предоставляет пользовательский интерфейс для взаимодействия с GCS, в этом уроке мы рассмотрим интерфейс командной строки, поскольку этот подход полезен для создания автоматизированных рабочих процессов.
Установка библиотек GCS
Чтобы взаимодействовать с облачным хранилищем с помощью Python, нам также необходимо установить библиотеку GCS, используя команду, показанную ниже:
pip install --user google-cloud-storage export GOOGLE_APPLICATION_CREDENTIALS=dsdemo.json
Как создать ведро в GCS
Прежде чем мы сможем сохранить файл, нам нужно настроить корзину на GCS. Мы создадим имя корзины, в dsp_model_storeкоторой мы будем хранить объекты модели. В приведенном ниже сценарии показано, как создать новый сегмент с помощью create_bucketфункции и как перебрать все доступные сегменты с помощью list_bucketsфункции.
bucket_nameПеред запуском этого скрипта вам нужно будет изменить переменную на что-то уникальное.
from google.cloud import storage bucket_name = "dsp_model_store" storage_client = storage.Client() storage_client.create_bucket(bucket_name) for bucket in storage_client.list_buckets(): print(bucket.name)
Как сохранить файл в GCS
Чтобы сохранить файл в GCS, нам нужно назначить путь к месту назначения, показанный командой bucket.blob ниже. Затем мы выбираем локальный файл для загрузки, который передается в функцию загрузки.
from google.cloud import storage bucket_name = "dsp_model_store" storage_client = storage.Client() bucket = storage_client.get_bucket(bucket_name) blob = bucket.blob("serverless/logit/v1") blob.upload_from_filename("logit.pkl")
Как скачать с GCS
В приведенном ниже фрагменте кода показано, как загрузить файл модели из GCS в локальное хранилище. Мы загружаем файл модели по локальному пути, local_logit.pklа затем загружаем модель, вызывая pickle.loadс этим путем.
import pickle from google.cloud import storage bucket_name = "dsp_model_store" storage_client = storage.Client() bucket = storage_client.get_bucket(bucket_name) blob = bucket.blob("serverless/logit/v1") blob.download_to_filename("local_logit.pkl") model = pickle.load(open("local_logit.pkl", 'rb')) model
Теперь мы можем сохранять файлы модели в GCS с помощью Python, а также извлекать их, что позволяет нам загружать файлы модели в облачные функции.
Дополнительные темы GCP, которые будут изучены дальше
Имея за плечами эти два примера, вы готовы к поиску более сложных тем GCP, таких как:
- Прогнозные облачные функции
- Настройка моделей Karas в облачных функциях
- Кибербезопасность через управление доступом
- Динамические модели в облачных функциях
Теперь мы получили представление об одном из основных инструментов, используемых специалистами по прикладным данным: бессерверных функциях. Давайте перейдем к другой популярной концепции, необходимой для понимания науки о данных в производственной среде: конвейера пакетной модели и PySpark.
Представляем модельные конвейеры
Конвейеры — важная часть для реализации программ машинного обучения. Машинное обучение можно рассматривать как просто кульминацию многих этапов вычислений для определения поведения или прогноза. Эти этапы вычислений разбиты на блоки в зависимости от роли, чтобы сделать их более модульными и более простыми в разработке.
Например, один блок может действовать как фильтр для анализа всех недопустимых типов данных, в то время как другой может сортировать данные на основе определенного атрибута. Эти фрагменты можно визуализировать как сегменты трубы.
Собранные вместе, все данные, поступающие в программу машинного обучения, последовательно проходят через эти сегменты трубопровода, образуя конвейер модели.
Что такое конвейеры пакетной модели?
Модельные конвейеры могут иметь потоковую или пакетную обработку. Конвейеры потоковой модели отправляют данные в своей последовательности по мере их поступления и делают выводы в режиме реального времени. Вместо этого конвейеры пакетной модели собирают и обрабатывают наборы данных в течение определенного периода времени, а затем передают их в конвейер в пакетном режиме. Данные не обрабатываются немедленно, а вместо этого сохраняются для последующего использования другой системой.
Конвейеры потоковой модели лучше всего подходят для приложений реального времени, например для анализа приема в социальных сетях во время пресс-релиза. Одним из недостатков конвейера потоковой модели является то, что он может временно отключаться из-за данных с высокой дисперсией, что означает, что его прогнозы могут быть ошибочными.
Конвейеры пакетной модели лучше всего подходят для обработки больших объемов данных, когда результаты в реальном времени не нужны, например, анализ старых отчетов о продажах для прогнозирования продаж на летний сезон следующего года.
Этот прогноз не будет использоваться сразу, но будет использован программой маркетингового машинного обучения при планировании кампаний на следующий год. В этом примере мы можем увидеть конечную точку хранения конвейеров пакетной модели в действии.
Какие инструменты мы используем для пакетных моделей конвейеров?
Итак, конвейеры пакетной модели предполагают одновременную обработку большого количества данных, поэтому нам нужен инструмент для массовой обработки данных. Для такого рода работы доступно несколько инструментов, таких как PySpark, Apache Airflow, Luigi, MLflow и Pentaho Kettle.
PySpark стал предпочтительным инструментом для конвейеров пакетного моделирования данных из-за его уникальной специализации в работе с большими коллекциями данных.
PySpark для пакетных конвейеров
Напоминаем, что PySpark — это версия Apache Spark для Python. Spark использует распределенную структуру машин для обеспечения чрезвычайно быстрых вычислений независимо от размера данных.
Эта скорость во многом обусловлена компонентом отказоустойчивых распределенных наборов данных (RDD) ядра Sparks. Позволяя кластерам машин одновременно обрабатывать набор данных, RDD позволяет Spark быть одновременно отказоустойчивым и эффективным. Это также позволяет специалистам по обработке данных создавать более масштабируемые модели, поскольку одна и та же модель с поддержкой Spark может обрабатывать от 10 до более 100 000 точек данных без каких-либо изменений.
Лучшие практики PySpark
Хотя PySpark очень похож на среду Python, в ней есть несколько уникальных передовых практик. Вот несколько рекомендаций, о которых следует помнить, продолжая учиться, чтобы максимизировать эффективность PySpark:
Avoid Dictionaries
Использование типов данных Python, таких как словари, означает, что код может быть невыполнимым в распределенном режиме. Вместо этого создайте еще один, который можно использовать в качестве фильтра для набора данных.
Limit Panda Usage
Вызов toPandasвызовет загрузку всех данных в память узла драйвера и предотвратит выполнение операций в распределенном режиме. Не используйте эту команду с большим набором данных.
Avoid Loops
Используйте group byи applyвместо циклов, чтобы гарантировать, что ваш код будет поддерживаться средами выполнения в дальнейшем.
Minimize Pulling from Dataframes
Избегайте операций, которые извлекают из набора данных в память. Это обеспечит масштабируемость вашего кода для более крупных наборов данных, которые невозможно легко загрузить или разместить на локальных машинах.
Use SQL
Запросы SQL легче понять, чем некоторые операции Pandas. Использование SQL позволит другим специалистам по обработке данных легче понять ваш код.
Теперь, когда мы изучили некоторые передовые практики, давайте применим их в нашей первой программе PySpark.
PySpark учебник для прикладной науки о данных
Один из самых быстрых способов начать работу с PySpark — это использовать размещенную среду записной книжки.
Databricks является крупнейшим поставщиком Spark и предоставляет бесплатную версию для начала работы под названием Community Edition.
Первым шагом является создание учетной записи на веб-сайте Databricks для версии сообщества. Затем выполните следующие действия, чтобы запустить тестовый кластер после входа в систему:
- Щелкните «Кластеры» на левой панели навигации.
- Щелкните «Создать кластер».
- Присвойте имя «DSP».
- Выберите самую последнюю среду выполнения (не бета-версию).
- Щелкните «Создать кластер».
- Через несколько минут у нас будет настроен кластер, который мы сможем использовать для отправки команд Spark.
В этом примере мы будем использовать набор данных о производительности игрока NFL в формате CSV. Чтобы импортировать эти данные, введите следующую команду:
stats_df = spark.read.csv("s3://dsp-ch6/csv/game_skater_stats.csv", header=True, inferSchema=True) display(stats_df)
Форматы файлов PySpark
При использовании S3 или других озер данных Spark поддерживает множество различных форматов файлов для хранения данных.
Паркет является отраслевым стандартом при работе со Spark, но мы также рассмотрим Avro, ORC и CSV. Avro — лучший формат для конвейеров потоковой передачи данных, в то время как ORC полезен при работе с устаревшими конвейерами данных.
Чтобы показать диапазон форматов данных, поддерживаемых Spark, мы возьмем набор данных статистики и запишем его в Avro, затем в Parquet, затем в ORC и, наконец, в CSV. После выполнения этого цикла ввода-вывода данных мы получим наш начальный фрейм данных Spark.
Давай начнем!
Avro
Avro — это распределенный формат файлов, основанный на записях. Форматы Parquet и ORC основаны на столбцах. Для начала мы сохраним набор данных статистики в формате Avro, используя фрагмент кода, показанный ниже:
# AVRO write avro_path = "s3://dsp-ch6/avro/game_skater_stats/" stats_df.write.mode('overwrite').format("com.databricks.spark.avro").save(avro_path) # AVRO read avro_df = sqlContext.read.format("com.databricks.spark.avro").load(avro_path)
Этот код записывает набор данных в S3 в формате Avro с помощью модуля записи Databricks Avro, а затем считывает результаты с помощью той же библиотеки. Результатом выполнения этих шагов является то, что теперь у нас есть фрейм данных Spark, указывающий на файлы Avro на S3. Поскольку PySpark лениво оценивает операции, файлы Avro не переносятся в кластер Spark до тех пор, пока из этого набора данных не будет создан вывод.
Parquet
Parquet на S3 в настоящее время является стандартным подходом к созданию озер данных на AWS, и такие инструменты, как Delta Lake, используют этот формат для обеспечения высокомасштабируемых платформ данных. Parquet — это формат файла, ориентированный на столбцы, который разработан для эффективного чтения, когда для операции осуществляется доступ только к подмножеству столбцов, например, при использовании Spark SQL.
Parquet — это собственный формат для Spark, что означает, что PySpark имеет встроенные функции как для чтения, так и для записи файлов в этом формате.
Пример записи фрейма данных статистики в виде файлов Parquet и чтения результата в виде нового фрейма данных показан во фрагменте ниже.
# parquet out parquet_path = "s3a://dsp-ch6/games-parquet/" avro_df.write.mode('overwrite').parquet(parquet_path) # parquet in parquet_df = sqlContext.read.parquet(parquet_path)
В этом примере мы не установили ключ раздела, но, как и в Avro, фрейм данных будет разделен на несколько файлов для поддержки высокопроизводительных операций чтения и записи. При работе с крупномасштабными наборами данных полезно установить ключи разделов для экспорта файла с помощью функции повторного разбиения.
ORC
ORC — еще один столбчатый формат, который хорошо работает со Spark. Основное преимущество перед Parquet заключается в том, что он может поддерживать улучшенное сжатие за счет дополнительных затрат на вычисления. Я включаю его в эту главу, потому что некоторые устаревшие системы все еще используют этот формат.
Пример записи фрейма данных статистики в ORC и считывания результатов обратно в фрейм данных Spark показан во фрагменте ниже.
# orc out orc_path = "s3a://dsp-ch6/games-orc/" parquet_df.write.mode('overwrite').orc(orc_path) # orc in orc_df = sqlContext.read.orc(orc_path)
CSV
Чтобы завершить наш круговой обход форматов файлов, мы запишем результаты обратно в S3 в формате CSV.
Чтобы убедиться, что мы пишем один файл, а не пакет файлов, мы воспользуемся командой coalesce для сбора данных в один узел перед его экспортом. Это команда, которая не работает с большими наборами данных, и в целом лучше избегать использования формата CSV при использовании Spark. Однако файлы CSV по-прежнему являются распространенным форматом для обмена данными, поэтому полезно понять, как экспортировать в этот формат.
# CSV out csv_path = "s3a://dsp-ch6/games-csv-out/" orc_df.coalesce(1).write.mode('overwrite').format( "com.databricks.spark.csv").option("header","true").save(csv_path) # and CSV read to finish the round trip csv_df = spark.read.csv(csv_path, header=True, inferSchema=True)
Теперь, когда мы вернули наш файл в формат CSV, вы завершили свое первое знакомство с PySpark, а также ознакомились с каждым из типов файлов.