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

Большинство рабочих процессов в области науки о данных начинается с Pandas. Pandas - отличная библиотека, которая позволяет выполнять различные преобразования и может обрабатывать различные типы данных, такие как CSV или JSON и т. Д. Мне нравятся Pandas - я сделал подкаст по нему под названием Почему Pandas - это новый Excel. Я по-прежнему считаю Pandas отличной библиотекой в ​​арсенале специалистов по данным. Однако наступает момент, когда наборы данных, над которыми вы работаете, становятся слишком большими, и Pandas начинает исчерпывать память. Именно здесь на сцену выходит Спарк.

Я пишу это сообщение в блоге в формате вопросов и ответов с вопросами, которые могут у вас возникнуть, и которые у меня тоже были, когда я только начинал.

Q1. Что такое Spark?

Spark - это платформа для обработки массивных наборов данных. Он позволяет обрабатывать файлы больших данных распределенным образом. Он запускает несколько рабочих процессов, которые обрабатывают и обрабатывают фрагменты вашего большого набора данных, все они организованы узлом драйвера. Распределенный характер этой структуры позволяет масштабировать ее до ТБ данных. Вы больше не ограничены оперативной памятью какой-либо отдельной машины. Экосистема Spark сейчас настолько изменилась, что вам не нужно беспокоиться о какой-либо оркестровке рабочих, и вы можете использовать ее прямо из коробки с отличной производительностью.

Q2. Когда мне следует отказаться от Pandas и серьезно подумать об использовании Spark?

Это зависит от оперативной памяти вашей машины. Я бы сказал, что наборы данных размером более 10 ГБ становятся слишком большими для Pandas, и Spark становится здесь действительно полезным. Предположим, у вас есть 10 столбцов в наборе данных, каждая ячейка состоит из 100 символов и, следовательно, примерно 100 байт, и большинство символов являются ASCII и могут быть закодированы в 1 байт - тогда 10 миллионов строк будут примерно тем местом, где вам следует подумать о Spark.

Q3. Spark все делает лучше, чем Pandas?

Нет! Начинающим панд определенно намного проще выучить. Spark может быть сложнее, но с недавними API-интерфейсами вы можете работать с большими данными с фреймами данных, с которыми почти так же легко работать, как с фреймами данных Pandas.

Кроме того, до недавнего времени в Spark не было большой поддержки визуализаций. Вам нужно было делать визуализацию только на подмножествах данных. Это недавно изменилось, когда Databricks объявили, что у них будет встроенная поддержка визуализаций в Spark (я все еще жду этого). Но пока это не созреет, Spark не сможет полностью заменить Pandas, по крайней мере, в области визуализации. Вы всегда можете преобразовать фрейм данных Spark в Pandas с помощью df.toPandas(), а затем запустить визуализации или код Pandas.

Q4. Спарк страшно настраивать. Что мне делать?

С Spark можно взаимодействовать в Python через PySpark или Scala (или R или SQL). Я написал блог о том, как начать работу с PySpark локально или на настраиваемых серверах, и люди отмечали, насколько сложно начать работу. Я думаю, вы можете сразу перейти к управляемым облачным решениям, пытаясь запустить Spark.

Я бы порекомендовал два способа начать работу со Spark:
1. Databricks - это полностью управляемый сервис, который управляет кластерами Spark в AWS / Azure / GCP для вас. У них есть записные книжки, которые можно запускать, и они очень похожи на записные книжки Jupyter.
2. Ноутбуки Amazon EMR и Zeppelin - это полууправляемый сервис от AWS. Вам необходимо разместить конечную точку Spark EMR, а затем запустить записные книжки Zeppelin для взаимодействия с ней. У других облачных провайдеров есть аналогичные услуги, и я не включаю их сюда.

Q5. Что лучше между Databricks и EMR?

Потратив несколько часов на то, чтобы понять плюсы и минусы каждого из них, есть несколько соображений:
a) EMR полностью управляется Amazon, и вам не нужно покидать экосистему AWS.
б) Если у вас есть опыт работы с DevOps или у вас есть помощник по DevOps, EMR может быть более дешевым вариантом - вам нужно знать, как увеличивать и уменьшать инстансы после того, как с ними покончено. При этом EMR может быть нестабильным, и вам может потребоваться несколько часов на отладку. Databricks Spark намного стабильнее.
c) С помощью Databricks легко планировать задания - вы можете очень легко запланировать запуск записных книжек в определенное время дня или недели. Они также предоставляют интерфейс для показателей в пользовательском интерфейсе Ganglia.
г) Работа Databricks может быть на 30-40% дороже для вакансий Spark, чем EMR. Но, учитывая гибкость и стабильность, а также отличную поддержку клиентов, я думаю, что они того стоят. Databricks действительно взимает 6–7 раз за интерактивную работу ноутбуков в Spark, так что помните об этом. Учитывая, что после 30/60/120 минут активности вы можете отключить инстансы и, таким образом, сэкономить на затратах, я все же думаю, что они могут быть в целом дешевле.

Учитывая эти моменты, я бы сказал, что вам следует перейти на Databricks, если это ваш первый проект Spark, но если у вас достаточно опыта в DevOps, вы можете попробовать EMR или запустить Spark на своих машинах. Если вы не возражаете публично поделиться своей работой, вы можете бесплатно попробовать версию сообщества Databricks или воспользоваться 14-дневной пробной версией корпоративной версии.

Q6. Насколько похож или отличается PySpark от Pandas?

Я считаю, что это заслуживает отдельного блога. Этот доклад Эндрю Рэя, автора Spark, должен ответить на некоторые из ваших вопросов.
Ключевые сходства:
a) Фреймы данных Spark очень похожи на фреймы данных Pandas.
б) Группы, агрегаты, выбор и другие преобразования PySpark очень похожи на Pandas. PySpark немного сложнее и требует некоторого обучения по сравнению с Pandas, но ощущается похоже.

Ключевые отличия заключаются в следующем:
a) Spark позволяет запрашивать фреймы данных с помощью как SQL, так и Python, что, на мой взгляд, действительно здорово. Иногда некоторую логику проще написать на SQL, чем запомнить точный API в Pandas / PySpark, и вы можете сделать это и работать взаимозаменяемо.
б) Фреймы данных Spark неизменяемы. Запрещается нарезка, перезапись данных и т. Д.
в) Spark выполняет ленивые оценки. Он строит график всех преобразований, а затем лениво оценивает их, когда вы фактически предоставляете действие, такое как collect, show или take. Преобразования могут быть широкими (смотрите на все данные по всем узлам, orderBy или groupBy) или узкими (смотрите на отдельные данные в каждом узле contains или filter). Выполнение нескольких широких преобразований может быть медленнее по сравнению с узкими преобразованиями. По сравнению с Pandas вам нужно гораздо внимательнее относиться к широким преобразованиям, которые вы используете!

Q7. Есть ли у Spark какие-то другие преимущества?

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

Q8. Есть ли примеры архитектур конвейера данных со Spark?

Да, вот конвейер ETL, в котором необработанные данные обрабатываются из озера данных (S3) и преобразуются в Spark, загружаются обратно в S3, а затем загружаются в хранилище данных, такое как Snowflake или Redshift, которое затем запускает инструмент бизнес-аналитики, такой как Tableau или Looker.

Вы также можете сначала собрать данные из разрозненных источников внутри хранилища, а затем использовать Spark для преобразования этих больших наборов данных, загрузить их в S3 в файлы Parquet, а затем прочитать их из SageMaker, если вы предпочитаете использовать SageMaker вместо MLLib от Spark. Дополнительным преимуществом SageMaker является то, что он позволяет легко развертывать и запускать модель с помощью функции Lambda, которая, в свою очередь, подключается к миру через конечную точку REST в API Gateway.
Я написал блог об этой архитектуре. Также книга Жюля Дамджи Learning Spark - это действительно круто, чтобы узнать о Spark.

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

С любыми вопросами или комментариями обращайтесь ко мне в LinkedIn!

Ресурсы:
1. Действительно потрясающий разговор Жюля Дамджи о том, как работает Spark, за кулисами.
2. Книга« Обучающая искра » Жюля Дамджи.
3. Сравните синтаксис Pandas с PySpark talk Эндрю Рэя.