Какие типы операций существуют в Apache Spark?

«Какие типы операций существуют в Apache Spark?» — вопрос из категории Apache Spark, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Apache Spark операции делятся на два основных типа: трансформации (transformations) и действия (actions).

Трансформации — ленивые операции, которые создают новую RDD, DataFrame или Dataset из существующей. Они не выполняются немедленно, а лишь строят граф вычислений (DAG).

  • Поэлементные преобразования: map(), flatMap(), filter().
  • Агрегации и соединения: groupBy(), reduceByKey(), join(), union().
  • Изменение партиционирования: repartition(), coalesce().

Действия — операции, которые запускают вычисления, возвращают результат в драйвер-программу или сохраняют данные. Они заставляют выполниться все накопленные трансформации.

  • Сбор данных: count(), collect(), take(), first().
  • Сохранение: saveAsTextFile(), write().parquet(), write().csv().
  • Агрегация: reduce(), aggregate(), foreach().

Пример на Scala с RDD:

// Трансформации (ленивые)
val rdd = sc.parallelize(Seq(1, 2, 3, 4, 5))
val transformedRdd = rdd.filter(_ % 2 == 0).map(_ * 10) // Фильтр и умножение

// Действие (запускает вычисления)
val result = transformedRdd.collect() // Array(20, 40)
println(result.mkString(", "))

Ключевое отличие: Трансформации определяют что вычислять, а действия — когда начинать вычисления и что с результатом делать.