Transformation описывает новый набор данных, например filter или map, обычно без немедленного вычисления. Action требует результата, например count, collect или запись, и запускает выполнение зависимостей.
Job — вычисление для получения результата; его делят на stages по границам shuffle. Stage состоит из tasks, каждая из которых обрабатывает свою партицию.
Spark делит данные на партиции и выполняет работу над ними на executors. Driver строит план, а вычисления запускаются при действиях, которым нужен результат.
Salting разбивает слишком частый ключ на несколько искусственных подгрупп, добавляя к нему «соль». Это распределяет нагрузку, которую иначе получила бы одна перегруженная партиция.
Для SQL и DataFrame Spark строит и оптимизирует план запроса, в частности с помощью Catalyst. Опыт работы с оптимизатором показывают через анализ плана и устранение конкретной причины медленного выполнения.
pandas — библиотека табличного анализа в одном процессе, PySpark — Python-интерфейс распределённого Spark, а Polars использует колоночный движок с параллельным выполнением и ленивыми запросами.
cache сохраняет вычисленные данные с уровнем хранения по умолчанию, а persist позволяет выбрать уровень явно. Это полезно, когда один промежуточный результат используется несколько раз.