Apache Spark

Проработать:

  1. Spark — Потрясающий веб-микрофреймворк для Java
  2. Евгений Борисов — Мифы о Spark, или Может ли пользоваться Spark обычный Java-разработчик
  3. Какие задачи решает big data
  4. Функции высшего порядка в Spark 3.1
  5. Интеграция Spark Streaming и Kafka
  6. Apache Spark: что там под капотом?
  7. Машинное обучение с Apache Cassandra и Apache Spark
  8. МИТАП: «Установка Apache Spark - это просто»_11 мая 2022г
  9. МИТАП "Apache Spark за 2 часа - для нетерпеливых"_20 апреля 2022г
  10. Different Types of Spark Join Strategies
  11. Spark RDD Operations-Transformation & Action with Example
  12. Что такое Apache Spark
  13. Top 25 Apache Kafka Interview Questions Answers for Java Developers
  14. spark join strategies
  15. dataset vs dataframe spark
  16. База данных Фильмов

Что это

Apache Spark — фреймворк с открытым исходным кодом для реализации распределённой обработки неструктурированных и слабоструктурированных данных через параллельные вычисления на кластере, входящий в экосистему проектов Hadoop.

Основные разделы

Spark состоит:

  1. Spark Core - базовый движок. Управление памятью, Планирование задач, Отказоустойчивость, Работа с RDD.
  2. SQL. Работа со структурированными данными, DataFrame и Dataset API, SQL-запросы.
  3. STREAMING DATA - обработка потоковых данных в реальном времени.
  4. MACHINE LEARNING - Библиотека машинного обучения, классификация, регрессия, кластеризация и т.д.
  5. GRAPH ANALYTICS - Обработка графов и сетей связей

С архитектурной точки зрения Spark-приложение состоит из:

Типы данных

Характеристика RDD DataFrame Dataset
Типизация ✔ ✖ ✔
Оптимизация(Catalys) ✖ ✔ ✔
Производительность Ниже Высокая Высокая
Удобство SQL ✖ ✔ ✔
Контроль над данными Максимальный Средний Высокий

RDD(Resilient Distributed Datasets)

RDD - основной базовая абстракция Spark, представляющая неизменный набор элементов, разделенных по узлам кластера, что позволяет выполнять параллельные вычисления.

Его можно получить из:

  1. Файла
  2. Памяти
  3. Другого RDD

SparkContext или JavaSparkContext(для JAVA) - место откуда мы получает RDD.

Пример конфигурации JavaSparkContext:

SparkConf conf = new SparkConf();
conf.setAppName("my spark application");
conf.setAppName("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);
        

DataFrame

DataFrame - состоит из RDD. По сути это таблица со схемой, аналог SQL-таблицы.

Datasets

Datasets - это типизированные DataFrame. Комбинация RDD и DataFrame.

RDD Operations:

Имеет методы, которые работают аналогично с Stream API(Transformations - Intermediate, Actions - Terminal). Также как в JAVA Stream API если метод возвращает RDD то это Transformations иначе это Actions.

Transformations:

  1. map
  2. flatMap
  3. filter
  4. mapPartitions, mapPartitionsWithIndex
  5. sample
  6. union, intersection, join, cogroup, cartesian
  7. distinct
  8. reduceByKey, aggregateByKey, sortByKey
  9. pipe
  10. coalesce, repartition, repartitionAndSortWithinPartitions

Actions:

  1. reduce
  2. collect
  3. count, countByKey, countByValue
  4. first
  5. take, takeSample, takeOrdered
  6. saveAsTextFile, saveAsSequenceFile, saveAsObjectFile
  7. foreach

На Spark все Transformations методы выполняются на кластере и Actions на драйвере(тот кто отвечает за таксу и распределяет ее по кластеру).

Мы можем сохранять промежуточные операции методом Transformations persist(StorageLevel).

DataFrame Operations:

Стратегии выполнения Join в Spark

Shuffle

Spark shuffle - это операция перемешивания(перераспределения) данных между Executors. Побочный эффект таких аналитических преобразований, как join(), groupBy(), orderBy(), reduceByKey(), union() и тд.

    Способы снижения отрицательного эффекта Shuffle-операций
  1. Сократить число Executors(меньше обмена между машинами)
  2. Уменьши объем данных(сбрасывания лишних столбцов, фильтрация)

Catalyst Optimizer

Catalyst Optimizer - оптимизатор для DataSet.

Примеры кода

Проверка колонки на максимальное значение(Date или Numeric)

.groupBy(col(AF.OfficeId)).agg(min(AF.Date))