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. spark join strategies
  14. dataset vs dataframe spark
  15. База данных Фильмов

Что это

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))