Spark Flashcards

1
Q

Что это простыми словами

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Архитектура

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Трансформации, Действия, Ленивые вычисления

A

Трансформации преобразуют данные (агрегируют, фильтруют и пр.).

Действия возвращают результат (печатают в консоли первые 5 строк, сохраняют в файл и пр.).

Lazy evaluation – трансформации будут выполнены только в момент вызова Action (действия). Это нужно, чтобы можно было логически делить код на понятные шаги, а спарк “под капотом” менял порядок шагов и выполнял вместе. За это отвечает оптимизатор Catalyst.

Такая оптимизация уменьшает количество чтений данных с диска, упрощает вычисления с сохранением логики, пропускает данные, которые не нужны для получения результата.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Shuffle, partitionBy, широкие и узкие трансформации

A

Спарк выполняет вычисления на кластере – группе серверов, соединённых сетью. Передача данных по сети (shuffle) это дополнительный шаг, который нужен не для всех трансформаций. Но для того, чтобы вернуть правильный результат, иногда это необходимо.

Например, прежде чем вычислять средний чек по магазинам за месяц, нужно все данные за этот один месяц переместить на один узел, а уже потом агрегировать. И так по каждому месяцу данные физически перераскладываются по разным серверам. Контролировать распределение данных можно через partitionBy.

Широкие трансформации могут требовать передать данные по сети, узкие выполняются на одном узле над одной партицией.
Зачастую оптимизация заключается в уменьшении числа широких операций до теоретического минимума.

Широкие:
. Intersection
. Distinct
. GroupByKey
. ReduceByKey
. Join
. Repartition

Узкие:
. Map
. Filter
. Union
. Sample
. Coalesce (в случае уменьшения числа партиций, например до 1 партиции на ноду)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое spill

A

Скорость спарка в основном завязана на вычислениях в оперативной памяти. Если данные не помещаются в ОЗУ, происходит spill – сохранение промежуточных результатов на диск, который в разы медленнее оперативной памяти.

Может происходить как при вычислениях на executor’е, так и при сборе всех результатов на driver. Решение – увеличивать количество кусочков, на которые делятся данные (партиций) или увеличивать лимиты ОЗУ.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Dataframe vs Dataset vs RDD

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что происходит под капотом при запуске джобы

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Coalesce vs Repartition

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Параллелизм

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

UDF

A

Пользовательские функции, написанные в Spark. Обычно плохо оптимизируются движком при анализе кода, являются плохой практикой. Старайся избегать в production коде, если на Python, только если никак нельзя обойтись стандартными методами и типами данных.

Проблема в том, что для исполнения Python UDF нужно перенести данные к коду и вернуть обратно. Тот же Spark SQL обычно выполняется напрямую на данных (переносит код к данным), поэтому может быть в разы быстрее.

UDF на Scala спрашивают редко. Тоже будет медленнее встроенных трансформаций, но лучше, чем PySpark UDF, т.к. работает напрямую.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как исправить ошибку OOM (Out of memory)

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Физические типы join

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Pandas vs Spark vs MapReduce

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Как бороться с перекосом данных (data skew)

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Параметры spark submit

A

TODO

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Cache() и Persist()