ScanBuilder — интерфейс в экосистеме Apache Spark, предназначенный для построения объектов, отвечающих за чтение данных из внешних источников с поддержкой push-down оптимизаций. Этот компонент обычно используется в реализациях источников данных (DataSource V2) на языках Java и Scala и обеспечивает абстракцию для конфигурации сканирования: фильтров, проекций, разделов и других ограничений, которые можно передать дальше в движок чтения. ScanBuilder служит связующим звеном между планировщиком Spark и конкретной реализацией коннектора, позволяя сократить объём передаваемых в память данных и уменьшить стоимость ввода-вывода за счёт ранней фильтрации и агрегации.
Исторически ScanBuilder и связанные с ним интерфейсы появились в рамках эволюции модели DataSource V2, где требования по расширяемости и более тонкой интеграции с планировщиком Spark привели к выделению набора контрактов для оптимизаций на стороне источника. В документации и практических реализациях ScanBuilder описывается как фабричный объект, принимающий схемы, опции и запросы на push-down, и возвращающий объект Scan, инкапсулирующий параметры и методы для непосредственного получения RDD/Batch/Stream данных. При ограниченном доступе к документированным деталям реализации в конкретной версии Spark, общее назначение остаётся стабильным: передача намерений оптимизации от Spark в коннектор.
- Настройка проекции: позволяет задать перечень столбцов, которые необходимо считать, чтобы избежать чтения ненужных полей.
 - Push-down фильтров: поддерживает передачу выражений фильтрации в источник данных для отбора строк на стороне хранилища.
 - Push-down агрегаций: в некоторых реализациях допускает выполнение частичных или полных агрегатных вычислений на стороне источника для снижения объёма передаваемых данных.
 - Поддержка разделов и праймеризации: предоставляет способы указать конкретные разделы/списки файлов для сканирования и оптимизировать точечный доступ.
 - Конфигурация чтения: принимает параметры (формат, буферизация, параллелизм) и передаёт их в создаваемый Scan для контроля поведения чтения.
 - Интеграция со схемой: обеспечивает согласование схемы данных, сопоставление типов и возможность управления проекцией и приведением типов.
 - Возврат объекта Scan: после применения push-down опций возвращает объект Scan, предназначенный для создания задач чтения и формирования физического плана выполнения.
 - Разделение работы: поддерживает механизмы разбивки на задания (splits), которые используется планировщиком для параллельной обработки.
 - Совместимость версий: интерфейс проектируется с учётом эволюции API, позволяя реализациям расширять функциональность без нарушения базового контракта.