Раздел 26 · Data Engineering

DataFrame против RDD: Catalyst и Tungsten

junior~10 мин

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

RDD гибкий: в нём могут лежать любые объекты Python, а функции в map и filter делают что угодно. Но за гибкость приходится платить. Spark не знает, что внутри ваших кортежей и лямбд, и поэтому не может ничего улучшить: он честно выполняет функции строка за строкой. В Spark 2.0 главным интерфейсом стал DataFrame, и с тех пор почти весь код пишут на нём. Разберём почему.

Рецепт и заказ в ресторане

Есть два способа поесть. Можно отдать повару рецепт: «возьми три яйца, разбей, взбей вилкой, вылей на сковороду». Повар сделает ровно это, даже если взбивать миксером быстрее, а яйца уже стоят взбитыми в холодильнике.

А можно сказать официанту: «омлет из трёх яиц». Вы описали результат, а как его получить, решает кухня. Она знает, что есть миксер и заготовки, и сделает быстрее.

RDD это рецепт. DataFrame это заказ.

DataFrame знает схему

DataFrame это распределённая таблица со схемой. Spark знает имена и типы колонок, а операции вы описываете выражениями, которые Spark умеет читать: F.col("status") == "delivered", а не лямбдой.

Это даёт ему две возможности, у которых есть имена.

Catalyst это оптимизатор. Он берёт план, построенный из ваших операций, и переписывает его по правилам. Фильтр он переносит к самому чтению файла, чтобы лишние строки не поднимались. Из Parquet он читает только те колонки, которые используются. Для соединения таблиц выбирает способ по их размеру. Вы пишете как удобно, а выполняется как быстро.

Tungsten это движок исполнения. Строки DataFrame хранятся не как объекты Python и не как объекты JVM, а в компактном двоичном формате. А цепочку операторов Spark склеивает в одну сгенерированную функцию, которая проходит по строкам без лишних вызовов. В плане такие склеенные куски помечены звёздочкой и номером: *(1).

урок из курса

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

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