Основы работы с RDD
Что такое Transformations и Actions?
В Apache Spark RDD (Resilient Distributed Dataset), Transformations и Actions - это два основных типа операций:
-
Transformations: Эти операции преобразуют один RDD в другой. Они являются ленивыми, то есть не выполняются немедленно, а создают новый RDD, который запоминает примененное к нему преобразование. Примеры Transformations включают
map,filter,flatMap,groupBy,sortByи т. д. -
Actions: Эти операции вычисляют результат на основе RDD и возвращают его в драйверскую программу или сохраняют его во внешнее хранилище данных. Они вызывают выполнение ленивых Transformations. Примеры Actions включают
collect,count,reduce,saveAsTextFile,foreachи т. д.
Используя комбинацию Transformations и Actions, можно создавать сложные вычислительные пайплайны в Spark, работающие с распределенными данными.
Что такое ленивые вычисления?
Ленивые вычисления - это стратегия, при которой вычисления откладываются до тех пор, пока не понадобится результат. Вместо того чтобы немедленно вычислять значение выражения, оно сохраняется в виде отложенной инструкции или структуры данных. Это позволяет оптимизировать использование ресурсов, избегать избыточных вычислений и выполнение только необходимых операций. В контексте Apache Spark, например, Transformations являются ленивыми, что означает, что они не выполняются немедленно, а создают отложенный план выполнения, который будет активирован только при вызове Action.
В чём разница Narrow transformations и wide transformations?
Разница между узкими (Narrow) и широкими (Wide) трансформациями в Apache Spark заключается в их воздействии на данные и структуру выполнения задач.
-
Narrow transformations (узкие трансформации):
-
Применяются к каждой партиции данных независимо.
-
Не требуют перемешивания данных между разными партициями.
-
Примеры:
map(),filter(),flatMap(). -
Результат обработки каждой партиции остается в пределах одного исполнителя.
-
-
Wide transformations (широкие трансформации):
-
Требуют перемешивания данных между разными партициями.
-
Могут вызывать перераспределение и сортировку данных.
-
Часто приводят к созданию новых партиций.
-
Примеры: groupByKey() и reduceByKey() могут требовать shuffle. reduce() является action, а не transformation.
-
Объясните, что такое RDD в Apache Spark и каковы его основные свойства?
RDD (Resilient Distributed Dataset) — это основная абстракция
данных в Apache Spark. Это неизменяемая распределенная коллекция объектов,
которая может быть обработана параллельно. Основные свойства RDD
:
-
Устойчивость (
Resilient): RDD может восстанавливаться после сбоев благодаря DAG (Directed Acyclic Graph) вычислений. -
Распределенность (
Distributed): RDD делится на множество партиций, которые распределены по кластерам. -
Неизменяемость (
Immutable): После создания RDD нельзя изменить. Все трансформации создают новые RDD. -
Ленивость (
Lazy Evaluation): Вычисления в RDD выполняются только при вызове действий (actions).
Как создать RDD из внешнего источника данных и преобразовать его?
RDD можно создать из различных внешних источников, таких как файлы
HDFS, базы данных и другие. Пример создания RDD из
текстового файла и его преобразования:
val sc = new SparkContext(conf)
// Создание RDD из текстового файла
val lines = sc.textFile("hdfs://path/to/file.txt")
// Преобразование RDD (например, фильтрация строк)
val filteredLines = lines.filter(line => line.contains("Spark"))
Чем отличается действие (action) от преобразования (transformation) в контексте RDD?
Разница между action и transformation в контексте RDD:
-
Transformation (Преобразование): Операция, которая принимает RDD и возвращает новый RDD. Примеры:
map,filter,flatMap. Трансформации ленивы и не выполняются до вызова действия. -
Action (Действие): Операция, которая запускает выполнение вычислений и возвращает результат (или побочные эффекты). Примеры:
collect,count,saveAsTextFile. Действия вызывают выполнение всех зависимых трансформаций.