---
title: Основы работы с RDD
seo:
  title: Основы работы с RDD — Data Engineer
  description: Тема «Основы работы с RDD» для собеседования Data Engineer. Что такое Transformations и Actions? Что такое ленивые вычисления?
---

[Все темы Data Engineer](/data-engineer)

## <strong>Что такое</strong> <code>Transformations</code> <strong>и</strong> <code>Actions</code><strong>?</strong> [#q-14bee738d69b8142b1d1e72c42908039]

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

{/* prettier-ignore */}
1. <strong>Transformations</strong>&#58; Эти операции преобразуют один RDD в другой. Они являются ленивыми, то есть не выполняются немедленно, а создают новый RDD, который запоминает примененное к нему преобразование. Примеры Transformations включают <code>map</code>, <code>filter</code>, <code>flatMap</code>, <code>groupBy</code>, <code>sortBy</code> и т. д.

1. <strong>Actions</strong>&#58; Эти операции вычисляют результат на основе RDD и возвращают его в драйверскую программу или сохраняют его во внешнее хранилище данных. Они вызывают выполнение ленивых Transformations. Примеры Actions включают <code>collect</code>, <code>count</code>, <code>reduce</code>, <code>saveAsTextFile</code>, <code>foreach</code> и т. д.

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

:::note[Ссылки для изучения]

1. [Что такое RDD и как с ним работать](https://spark-school.ru/wiki/rdd-wiki/)
   :::

---

## <strong>Что такое ленивые вычисления?</strong> [#q-14bee738d69b81bc854de050b1da8f1d]

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

:::note[Ссылки для изучения]

1. [Что такое RDD и как с ним работать](https://spark-school.ru/wiki/rdd-wiki/)
   :::

---

## <strong>В чём разница</strong> <code>Narrow transformations</code> <strong>и</strong> <code>wide transformations</code><strong>?</strong> [#q-14bee738d69b8158a932df841818e7b3]

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

{/* prettier-ignore */}
1. <strong>Narrow transformations (узкие трансформации)&#58;</strong>

    - Применяются к каждой партиции данных независимо.

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

    - Примеры&#58; <code>map&#40;&#41;</code>, <code>filter&#40;&#41;</code>, <code>flatMap&#40;&#41;</code>.

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

1. <strong>Wide transformations (широкие трансформации)&#58;</strong>

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

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

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

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

:::note[Ссылки для изучения]

1. [Что такое RDD и как с ним работать](https://spark-school.ru/wiki/rdd-wiki/)
   :::

---

## <strong>Объясните, что такое</strong> <code>RDD</code> <strong>в Apache Spark и каковы его основные свойства?</strong> [#q-14bee738d69b811f94ffdf9723e99435]

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

1. <strong>Устойчивость (</strong>
   <code>Resilient</code>
   <strong>)</strong>&#58; RDD может восстанавливаться после сбоев благодаря DAG
   (Directed Acyclic Graph) вычислений.

1. <strong>Распределенность (</strong>
   <code>Distributed</code>
   <strong>)</strong>&#58; RDD делится на множество партиций, которые
   распределены по кластерам.

1. <strong>Неизменяемость (</strong>
   <code>Immutable</code>
   <strong>)</strong>&#58; После создания RDD нельзя изменить. Все трансформации
   создают новые RDD.

1. <strong>Ленивость (</strong>
   <code>Lazy Evaluation</code>
   <strong>)</strong>&#58; Вычисления в RDD выполняются только при вызове
   действий (actions).

:::note[Ссылки для изучения]

1. [Что такое RDD и как с ним работать](https://spark-school.ru/wiki/rdd-wiki/)
   :::

---

## <strong>Как создать</strong> <code>RDD</code> <strong>из внешнего источника данных и преобразовать его?</strong> [#q-14bee738d69b81b4a976c7c888cdece1]

<code>RDD</code> можно создать из различных внешних источников, таких как файлы
<code>HDFS</code>, базы данных и другие. Пример создания <code>RDD</code> из
текстового файла и его преобразования&#58;

```scala
val sc = new SparkContext(conf)

// Создание RDD из текстового файла
val lines = sc.textFile("hdfs://path/to/file.txt")

// Преобразование RDD (например, фильтрация строк)
val filteredLines = lines.filter(line => line.contains("Spark"))
```

:::note[Ссылки для изучения]

1. [Что такое RDD и как с ним работать](https://spark-school.ru/wiki/rdd-wiki/)
   :::

---

## <strong>Чем отличается действие (</strong><code>action</code><strong>) от преобразования (</strong><code>transformation</code><strong>) в контексте RDD?</strong> [#q-14bee738d69b81d79694fb22efbb536a]

Разница между <code>action</code> и <code>transformation</code> в контексте <code>RDD</code>&#58;

- <strong>Transformation</strong> (Преобразование)&#58; Операция, которая
  принимает RDD и возвращает новый RDD. Примеры&#58; <code>map</code>,
  <code>filter</code>, <code>flatMap</code>. Трансформации ленивы и не
  выполняются до вызова действия.

- <strong>Action</strong> (Действие)&#58; Операция, которая запускает выполнение
  вычислений и возвращает результат (или побочные эффекты). Примеры&#58;
  <code>collect</code>, <code>count</code>, <code>saveAsTextFile</code>.
  Действия вызывают выполнение всех зависимых трансформаций.

:::note[Ссылки для изучения]

1. [Что такое RDD и как с ним работать](https://spark-school.ru/wiki/rdd-wiki/)
   :::
