Повышаем производительность Spark: Broadcasting | OTUS

Повышаем производительность Spark: Broadcasting

Соединение нескольких таблиц является достаточно распространенной операцией в Spark. Как правило, при ее выполнении происходит перетасовка (shuffle), которая за счет перемещений данных между узлами оказывает влияние на производительность. Можно ли избежать этой дорогостоящей операции?

3-20219-0d79b5.png

Практика показывает, что можно, если одна из таблиц не является большой по размеру. Например, посредством Broadcasting -- трансляции небольшой таблицы по кластерным узлам, в результате чего операции перетасовки можно избежать.

Давайте представим, что у нас существует таблица df_order, содержащая информацию о заказах. Кроме того, есть также и таблица df_city, включающая в себя информацию о городах, которые соответствуют заказу. И если даже в самих заказах миллионы строк и много столбцов, то, скорее всего, в таблице df_city число городов будет не очень высоким, к примеру, сотни строк. И если при добавлении информации о городах мы добавим к таблице заказов трансляцию (Broadcasting), никакой перетасовки не произойдет.

1-20219-186058.png

Важно отметить, что максимальный размер таблицы для трансляции составляет 8 Гб. Также Spark поддерживает изменение границы размеров этой таблицы, при которых Broadcasting станет выполняться автоматически. Реализовать это можно через параметр spark.sql.autoBroadcastJoinThreshold, который по дефолту равен 10 Мб.

Источник: https://towardsdatascience.com/apache-spark-performance-boosting-e072a3ec1179

2-20219-7d4b0a.png

P. S. Интересует Spark? Обратите внимание на специализированный курс по Spark в Otus.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто