Как Spark пропускает ненужные группы файлов

Если файлы заранее разложены по значению признака, обработка может не читать неподходящие разделы. Разбираем условия такого отбора и его ограничения.

Ряд светлых папок в тёмном органайзере, выбранная оранжевая папка и стеклянная лупа.

Нужный день можно искать до чтения содержимого

Представим условный архив поездок. Файлы за разные дни лежат в отдельных группах, а для отчёта нужны поездки только за вчера. Если обработка понимает правило размещения, она может сначала выбрать подходящую группу и не открывать содержимое остальных. Это похоже на поиск в архиве по разделам, название которых соответствует нужному признаку.

В Spark такой отбор называют отсечением разделов, или partition pruning. Spark — инструмент обработки данных, способный распределять работу между несколькими исполнителями. Сейчас речь о разделах сохранённого набора файлов. Их не следует автоматически отождествлять с частями вычисления: количество папок не задаёт напрямую количество одновременно работающих задач.

Правило размещения должно быть известно обработке

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

Для нашего архива уточним, какой день использован при раскладке: день поездки или день получения файла. Если вчера пришло исправление позавчерашней поездки, эти признаки могут различаться. Выбор группы только по знакомой дате тогда не доказывает полноты отчёта. Назначение признака нужно согласовать с тем, как файлы создаются и обновляются.

Условие отбора должно подходить к разделению

В руководстве Cloudera для Spark описан пропуск неподходящих подразделов при обращении к признаку разделения. В условном архиве отбор по дню может помочь выбрать нужные дневные группы. Но просьба найти поездки конкретного клиента не даёт такого же основания, если по клиенту набор не разделён.

Поэтому прежде, чем ждать экономии, предложим назвать два правила словами: по чему разложены файлы и что требуется отчёту. Их соответствие можно проверить на маленьком вымышленном примере. Если нужные записи встречаются во всех группах, такое разделение не позволяет пропустить большинство содержимого именно для этой задачи. Это ограничение выбора, а не поломка Spark.

Выбор разделов тоже требует работы

На примере AWS Glue, где используется Spark, документация AWS разделяет отбор сведений о разделах и последующее чтение файлов. Она также отмечает, что при очень большом числе разделов получение их списка может занимать время. Это конкретный пример реализации, а не одинаковое поведение всех хранилищ.

Для нашего архива полезно отдельно наблюдать подготовку списка и чтение содержимого. Маленький объём выбранных файлов не означает мгновенного начала расчёта. Если задержка возникает ещё до чтения, поиск причины только в размере вчерашних данных будет неполным. Стоит проверить, сколько служебных сведений приходится получить для выбора нужной группы.

Отсечение раздела и отбор внутри файла различаются

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

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

Как проверить идею без обещаний ускорения

Для условного отчёта заранее определим ожидаемые поездки и группы, в которых они должны находиться. Затем проверим состав результата, выбранные разделы и объём фактического чтения. Наблюдения времени сравниваем в сопоставимых условиях. Не стоит выводить ускорение только из доли пропущенных дней: подготовка и дальнейшая обработка тоже занимают время.

Общую картину даёт статья о распределённой работе Spark. Продолжить изучение инструмента можно на программе «PySpark для инженеров и аналитиков данных». Первый полезный вопрос к своему набору: по какому признаку он разделён и совпадает ли этот признак с нужным отбором?

PySpark для инженеров и аналитиков данных
Курс
Доступ сразу
PySpark для инженеров и аналитиков данных

Разработчик PySpark — это инженер, который обрабатывает большие объемы данных с помощью распределённых вычислений и строит масштабируемые системы обработки данных.

С нуля до junior
Теория и практика
Диплом по окончании
12 990
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
50

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

Как руководителю определить, какие навыки развивать внутри команды, когда нужна новая роль и почему обучение и найм часто дополняют друг друга.
Вертикальное и горизонтальное масштабирование данных: в чём разница
53

Вертикальное и горизонтальное масштабирование данных: в чём разница

Когда системе добавляют мощность одного сервера, когда делят работу между несколькими и почему увеличение ресурсов само по себе не решает любую проблему.
Журнал изменений данных: как выяснить, кто и когда изменил набор
47

Журнал изменений данных: как выяснить, кто и когда изменил набор

Что можно узнать из журнала действий с данными, как он помогает разбирать ошибки и почему его записи не показывают всю историю сами по себе.

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.