Раздел 26 · Data Engineering

SparkSession и экосистема Spark

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Два прошлых урока скрипты начинались сразу с spark.read: переменная spark уже ждала нас, как в интерактивной оболочке pyspark. В настоящем приложении её создают сами, и от этой строчки зависит, сколько ресурсов получит приложение и как оно будет себя вести. Разберём, что такое spark, как её создают и что Spark умеет, кроме таблиц.

Пульт управления

Представьте телевизор, приставку и колонку от разных производителей. Можно держать три пульта, а можно один универсальный: через него вы и переключаете каналы, и включаете фильм, и делаете громче.

spark это универсальный пульт Spark. Через него вы читаете файлы, выполняете SQL, запускаете потоковую обработку и настраиваете сессию. Объект называется SparkSession.

Раньше пультов было несколько: SparkContext для низкоуровневых наборов данных, SQLContext для SQL, HiveContext для таблиц Hive. Они до сих пор встречаются в старых статьях и ответах на форумах. С версии 2.0 всё это собрано в SparkSession, а SQLContext и HiveContext устарели. SparkContext остался внутри сессии: он доступен как spark.sparkContext, а в оболочке ещё и как sc.

Как создают сессию

В скрипте сессию собирают через строитель:

from pyspark.sql import SparkSession

spark = (SparkSession.builder
    .appName("gonets-zones")
    .config("spark.sql.shuffle.partitions", "8")
    .getOrCreate())
  • appName даёт приложению имя. Его видно в Spark UI и в списке приложений кластера, по нему вы найдёте свою работу среди чужих.
  • config задаёт настройку. Настроек у Spark сотни, их имена начинаются с spark.. Здесь мы уменьшаем число партиций после группировки: по умолчанию их 200, что много для маленьких данных.
  • getOrCreate возвращает сессию. Если она уже есть в процессе, вернётся та же самая: сессия на приложение одна.

Поэтому в песочнице, где spark уже создана, getOrCreate вернёт её же, просто с вашими настройками. Настройки можно менять и на ходу, через spark.conf.set(ключ, значение), и читать через spark.conf.get(ключ).

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.