Ответ
В 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(", "))
Ключевое отличие: Трансформации определяют что вычислять, а действия — когда начинать вычисления и что с результатом делать.