Содержание
Apache Arrow 26.0.0 вышел после трёх месяцев работы и принёс 337 исправлений. Главные изменения коснулись производительности разбора JSON, гибкости чтения Parquet и разделения библиотек в C++. Инженерам стоит оценить обновление, если они активно используют Parquet-файлы или строят конвейеры с Arrow Flight. Релиз также ужесточает требования к зависимостям и убирает устаревшие API, что может повлиять на сборки и тесты.
Изменения в ядре C++ и форматах
Разработчики перенесли большую часть обработки JSON с RapidJSON на simdjson. Это ускорило парсинг метаданных и интеграционных тестов, а также работу Flight SQL ODBC-драйвера. Новая реализация сериализации через JsonWriter даёт более предсказуемое поведение при больших объёмах данных. Переход на simdjson важен для команд, которые обрабатывают большие объёмы JSON-данных в реальном времени: снижается время ожидания при импорте схем и метаданных, что критично при построении конвейеров аналитики. В то же время инженерам нужно проверить, не зависит ли их код от специфического поведения RapidJSON, чтобы избежать сюрпризов после обновления.
В CSV-драйвере появились две опции: pad_short_rows заполняет отсутствующие поля null-значениями, а ignore_extra_columns отбрасывает лишние столбцы. Эти флаги полезны при обработке грязных логов или экспортов из внешних систем, где структура строк нестабильна. Для инженеров, принимающих решение об обновлении, важно понять, что такие опции снижают количество ручных предобработок данных и уменьшают риск ошибок при загрузке неидеальных CSV-файлов из внешних источников.
Вычислительные функции пополнились remainder и modulo, а временные округления теперь принимают duration. Хеш-агрегации научились работать со string_view и binary_view в качестве ключей группировки. Такие улучшения снижают копирование данных при агрегациях в DWH-сценариях. Командам, которые строят хранилища данных, стоит оценить прирост производительности на реальных запросах, особенно если агрегации выполняются над строковыми или бинарными ключами большого объёма.
Одновременно убрали поддержку Feather V1 и устарели Tensor IPC-сообщения. Если код ещё опирается на старые форматы, придётся мигрировать на Arrow IPC до следующего мажора. Перед обновлением рекомендуется провести аудит используемых форматов обмена, чтобы понять, потребуется ли переписывание частей кода и тестирование совместимости.
Улучшения в Parquet и файловых системах
Парсинг Thrift-метаданных Parquet теперь ограничивает глубину вложенности схемы. Значение по умолчанию 100 превращает потенциальный stack overflow в обычную ошибку, что важно при работе с автогенерированными схемами. Для инженеров, решающих, стоит ли обновляться, это означает снижение риска падения приложения при чтении сложных или некорректно сгенерированных файлов Parquet из внешних систем.
Чтение файлов с неизвестными комбинациями логических и физических типов стало tolerant. Это уменьшает количество отказов при миграции данных между разными версиями Spark или Hive. Новая низкоуровневая API декодирования FIXED_LEN_BYTE_ARRAY позволяет писать значения напрямую в буферы вызывающего кода. Такие изменения особенно ценны для команд, которые регулярно получают данные из разных Hadoop-экосистем и хотят минимизировать ручную обработку ошибок типов.
Отдельная библиотека libarrow_s3 вынесена из основного пакета. Пользователи, не нуждающиеся в S3, получают меньший бинарник и меньше зависимостей. При этом приложения должны явно линковаться или загружать libarrow_s3 через LoadFileSystemFactories. По умолчанию отключено чтение KMS URL из файла. Это повышает безопасность в закрытых контурах, но требует явной настройки, если используется собственный KMS. При принятии решения об обновлении важно взвесить выгоду от уменьшения размера поставки и поверхности атаки против необходимости корректировки скриптов сборки и конфигурации KMS.
Обновления Python и совместимости
Python 3.15 получил официальную поддержку, а 3.10 больше не собирается. Требуется numpy 2.x и pandas не ниже 2.2.2. Переход на StringDType из numpy теперь конвертируется в Arrow string или string_view без дополнительных шагов. Командам, использующим Python, стоит проверить, совместимы ли их текущие окружения с новыми требованиями к версиям библиотек, и оценить затраты на обновление зависимостей.
DLPack обновлён до версии 1.3 и добавил экспорт Arrow Arrays и Tensors. Это упрощает обмен данными с GPU-библиотеками, которые уже перешли на новую спецификацию. Для проектов, где важна интеграция с GPU-ускорением, обновление может упростить взаимодействие между Arrow и CUDA-библиотеками.
Отказ от старых pandas и numpy может потребовать пересборки зависимых образов. В изолированных окружениях без доступа к PyPI стоит заранее проверить наличие wheels под нужные версии Python. Это особенно актуально для российских команд, работающих в закрытых контурах.
Влияние на российские контуры и решение об обновлении
Разделение S3-библиотеки снижает поверхность атаки и размер поставки, что полезно при статической сборке в закрытых сетях. Однако придётся обновить скрипты сборки, если раньше libarrow тащил AWS SDK целиком. Ограничение вложенности Parquet и tolerant-режим чтения типов уменьшают риск падения на реальных датасетах из внешних источников. В то же время деприкейшн Feather V1 и Tensor IPC требует аудита старого кода, особенно в проектах с долгоживущими форматами обмена.
Для команд, которые уже используют simdjson или numpy 2.x, переход выглядит безопасным и даёт прирост скорости разбора. Остальным стоит запланировать тесты совместимости с новыми требованиями к зависимостям и проверить работу Parquet-читалок на своих схемах перед массовым обновлением. В целом обновление стоит рассматривать, если приоритетны производительность парсинга JSON и Parquet, а также безопасность поставок. Если проект сильно зависит от устаревших форматов или старых версий Python-библиотек, лучше отложить переход до завершения миграции.
Источник
Это краткий разбор материала Apache Arrow. Полная версия с примерами кода, схемами и деталями реализации — в оригинале: Apache Arrow 26.0.0 улучшил парсинг и Parquet.
Курс по теме — Каталог курсов Школы Больших Данных


