Перейти к содержимому
На этой странице

Основы работы с RDD

Все темы Data Engineer

Что такое Transformations и Actions?

В Apache Spark RDD (Resilient Distributed Dataset), Transformations и Actions - это два основных типа операций:

  1. Transformations: Эти операции преобразуют один RDD в другой. Они являются ленивыми, то есть не выполняются немедленно, а создают новый RDD, который запоминает примененное к нему преобразование. Примеры Transformations включают map, filter, flatMap, groupBy, sortBy и т. д.

  2. Actions: Эти операции вычисляют результат на основе RDD и возвращают его в драйверскую программу или сохраняют его во внешнее хранилище данных. Они вызывают выполнение ленивых Transformations. Примеры Actions включают collect, count, reduce, saveAsTextFile, foreach и т. д.

Используя комбинацию Transformations и Actions, можно создавать сложные вычислительные пайплайны в Spark, работающие с распределенными данными.


Что такое ленивые вычисления?

Ленивые вычисления - это стратегия, при которой вычисления откладываются до тех пор, пока не понадобится результат. Вместо того чтобы немедленно вычислять значение выражения, оно сохраняется в виде отложенной инструкции или структуры данных. Это позволяет оптимизировать использование ресурсов, избегать избыточных вычислений и выполнение только необходимых операций. В контексте Apache Spark, например, Transformations являются ленивыми, что означает, что они не выполняются немедленно, а создают отложенный план выполнения, который будет активирован только при вызове Action.


В чём разница Narrow transformations и wide transformations?

Разница между узкими (Narrow) и широкими (Wide) трансформациями в Apache Spark заключается в их воздействии на данные и структуру выполнения задач.

  1. Narrow transformations (узкие трансформации):
    • Применяются к каждой партиции данных независимо.

    • Не требуют перемешивания данных между разными партициями.

    • Примеры: map(), filter(), flatMap().

    • Результат обработки каждой партиции остается в пределах одного исполнителя.

  2. Wide transformations (широкие трансформации):
    • Требуют перемешивания данных между разными партициями.

    • Могут вызывать перераспределение и сортировку данных.

    • Часто приводят к созданию новых партиций.

    • Примеры: groupByKey() и reduceByKey() могут требовать shuffle. reduce() является action, а не transformation.


Объясните, что такое RDD в Apache Spark и каковы его основные свойства?

RDD (Resilient Distributed Dataset) — это основная абстракция данных в Apache Spark. Это неизменяемая распределенная коллекция объектов, которая может быть обработана параллельно. Основные свойства RDD :

  1. Устойчивость ( Resilient ): RDD может восстанавливаться после сбоев благодаря DAG (Directed Acyclic Graph) вычислений.

  2. Распределенность ( Distributed ): RDD делится на множество партиций, которые распределены по кластерам.

  3. Неизменяемость ( Immutable ): После создания RDD нельзя изменить. Все трансформации создают новые RDD.

  4. Ленивость ( 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. Действия вызывают выполнение всех зависимых трансформаций.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Data Engineer, ETL-разработчик. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.