Apache Spark Tutorial. PySpark и DataFrame. Как установить?
-
1 Краткий обзор Apache Spark
- 1.1 Что такое Apache Spark? С какими языками программирования он может работать?
- 1.2 История создания Apache Spark
- 1.3 Apache Spark / PySpark Tutorial: Basics In 15 Mins
- 1.4 Плюсы Apache Spark
- 1.5 Минусы Apache Spark
- 1.6 Что такое Resilient Distributed Datasets (RDD) — Устойчивые распределенные наборы данных?
- 1.7 Что такое Apache PySpark?
- 1.8 Интеграция Apache Spark с ClickHouse
1 Краткий обзор Apache Spark
1.1 Что такое Apache Spark? С какими языками программирования он может работать?
Apache Spark — это многоязычный движок для выполнения обработки данных, обработки данных и машинного обучения на одноузловых компьютерах или кластерах в памяти RAM.
Spark предоставляет высокоуровневые API-интерфейсы (библиотеки) на Java, Scala, Python и R, а также оптимизированный движок, поддерживающий общие графы выполнения.
Движок Apache Spark работает на JVM (Java), поэтому для запуска заданий и разработки приложений на компьютере должен быть установлен JDK.
Он также поддерживает богатый набор инструментов более высокого уровня, включая:
- Spark SQL для обработки SQL и структурированных данных,
- API-интерфейс pandas в Spark для рабочих нагрузок pandas,
- MLlib для машинного обучения,
- GraphX для обработки графов
- и Structured Streaming для incremental computation и stream processing (потоковой обработки).
Spark основан на Hadoop MapReduce и расширяет модель MapReduce, позволяя эффективно использовать ее для большего количества типов вычислений, включая интерактивные запросы и потоковую обработку.
1.2 История создания Apache Spark
Spark — это один из подпроектов Hadoop, разработанный Matei Zaharia в 2009 году в AMPLab Калифорнийского университета в Беркли. Проект был переведен в Open Sourced в 2010 году под лицензией BSD. Он был передан в дар фонду программного обеспечения Apache в 2013 году, и теперь с февраля 2014 года Apache Spark стал проектом Apache высшего уровня.
GitHub Apache Spark — A unified analytics engine for large-scale data processing
На момент написания статьи у проекта Apache Spark в GitHub следующие показатели:
1.3 Apache Spark / PySpark Tutorial: Basics In 15 Mins
This video gives an introduction to the Spark ecosystem and world of Big Data, using the Python Programming Language and its PySpark API. We also discuss the idea of parallel and distributed computing, and computing on a cluster of machines.
1.4 Плюсы Apache Spark
- Высокая скорость и производительность обработки данных за счет распределительных вычислениий на множестве машин in-memory.
- Удобные для разработчиков инструменты. Spark предоставляет удобные для разработчиков инструменты, которые работают с помощью простого вызова метода. Apache Spark также обеспечивает привязку к языку для R, Python, Scala и Java.
- Широкий выбор библиотек (для алгоритмов машинного обучения и анализа графов, позволяет решать различные задачи аналитики — возможность обработки данных в памяти с малой задержкой)
- Структурированная потоковая передача Spark Streaming
- Поддержка Lazy Evaluation (Ленивые вычисления): Apache Spark поддерживает ленивые вычисления. Это означает, что Apache Spark будет ждать всей инструкции перед ее обработкой.
1.5 Минусы Apache Spark
- Apache Spark требует много оперативной памяти для обработки данных, что напрямую будет влиять на стоимость владения инструментом.
- Ручная оптимизация: При работе со Spark требуется ручная оптимизация заданий, а также наборов данных. Для создания разделов пользователи могут самостоятельно указать количество разделов Spark. Для этого в качестве параметра метода parallelize необходимо передать количество фиксируемых разделов. Чтобы получить правильные разделы и кеш, все эти процедуры разделов должны контролироваться вручную. Например, SparkUI в какой-то степени решает вопросы наблюдения, а Spark Metrics — измерения производительности, но попробуйте подключиться к исполняемому приложению отладчиком — вы не знаете ни хост, где оно работает, ни порт, который окажется свободным для подключения.
- Spark сложно настраивать и обслуживать. Это означает, что обеспечить максимальную производительность, чтобы она не прогибалась под тяжелыми рабочими нагрузками по обработке данных, сложно. Нужно учесть следующие параметры: выделение памяти, количество ядер, доступные для работы Spark, количество памяти на каждый исполнитель, и т.п.
- Нет системы управления файлами.
-
Spark не полностью поддерживает обработку потока данных в реальном времени.
В потоковой передаче Spark данные делятся на небольшие пакеты на основе заданных интервалов времени. Таким образом, Apache Spark поддерживает time-based window criteria, но не на основе записей. - Плохое быстродействие UDF в PySpark (Slowness of PySpark UDFs): UDF на питоне приводит к тому, что происходит двойное преобразование данных между приложением и UDF. Рекомендация — не пишите на Python, пишите на Scala/Java.
1.6 Что такое Resilient Distributed Datasets (RDD) — Устойчивые распределенные наборы данных?
Resilient Distributed Datasets (RDD) — это фундаментальная структура данных Spark. Это неизменяемая распределенная коллекция объектов. Каждый набор данных в RDD разделен на логические разделы, которые могут быть вычислены на разных узлах кластера. RDD могут содержать объекты Python, Java, R или Scala любого типа, включая определяемые пользователем классы.
RDD — это отказоустойчивый набор элементов, с которыми можно работать параллельно.
Существует два способа создания RDD:
- распараллеливание существующей коллекции в программе-драйвере
- или ссылка на набор данных во внешней системе хранения, такой как общая файловая система, HDFS, HBase или любой источник данных, предлагающий входной формат Hadoop.
Spark использует концепцию RDD для достижения более быстрых и эффективных операций MapReduce.
1.7 Что такое Apache PySpark?
PySpark — это библиотека Spark, написанная на Python для запуска приложений Python с использованием возможностей Apache Spark. Используя PySpark, мы можем запускать приложения параллельно в распределенном кластере (несколько узлов). Другими словами, PySpark — это API Python для Apache Spark.
Spark в основном написан на Scala, а позже, благодаря адаптации к отрасли, это API PySpark, выпущенный для Python с использованием Py4J.
Py4J — это библиотека Java, которая интегрирована в PySpark и позволяет python динамически взаимодействовать с объектами JVM, поэтому для запуска PySpark вам также необходимо установить Java вместе с Python и Apache Spark.
Spark выполняет операции с миллиардами и триллионами данных в распределенных кластерах в 100 раз быстрее, чем традиционные приложения Python.
1.7.0.1 Кто использует PySpark?
PySpark очень хорошо используется в сообществе Data Science и Machine Learning, поскольку существует множество широко используемых библиотек для обработки данных, написанных на Python, включая NumPy, TensorFlow. Также используется из-за эффективной обработки больших наборов данных.
PySpark используется многими организациями, такими как Walmart, Trivago, Sanofi, Runtastic и многими другими.
1.7.1 Возможности PySpark
- Вычисления в памяти
- Распределенная обработка с использованием parallelize
- Может использоваться со многими менеджерами кластеров (Spark, Yarn, Mesos и т.д.)
- Fault-tolerant
- Immutable
- Lazy evaluation
- Cache & persistence
- Встроенная оптимизация при использовании DataFrames
- Поддерживает ANSI-SQL
1.7.2 Модули и пакеты PySpark
- PySpark RDD (pyspark.RDD)
- PySpark DataFrame and SQL (pyspark.sql)
- PySpark Streaming (pyspark.streaming)
- PySpark MLib (pyspark.ml, pyspark.mllib)
- PySpark GraphFrames (GraphFrames)
- PySpark Resource (pyspark.resource)
1.7.3 Сравнение Apache PySpark с Python Pandas
- Pandas выполняет операции на одной машине, тогда как PySpark работает на нескольких машинах.
- Pandas не поддерживает распределенную обработку, поэтому вам всегда нужно увеличивать ресурсы, когда вам нужна дополнительная мощность для поддержки ваших растущих данных.
1.8 Интеграция Apache Spark с ClickHouse
- GitHub — Spark ClickHouse Connector build on DataSourceV2 API
- https://housepower.github.io/spark-clickhouse-connector/
Spark ClickHouse Connector — это высокопроизводительный коннектор, основанный на Spark DataSource V2.
Автор: Иван Шамаев (оригинал статьи)