Получи случайную криптовалюту за регистрацию!

Давненько не писал ничего нового, ибо занимался очередной смен | Anscombe's Quartet

Давненько не писал ничего нового, ибо занимался очередной сменой места работы (что вполне успешно получилось, к слову говоря). В связи с внезапно образовавшимся свободным временем решил плотно заняться изучением относительно нового фреймворка под названием Apache Arrow. Кратко говоря, Arrow - это мультиязычная (на момент времени самыми зрелыми являются API для C++, Java, Python) платформа для работы с данными в памяти.

Ее идея довольно проста - при операциях с большими данными, и в особенности при передаче этих данных через процессы (скажем, Spark-to-Python), современные библиотеки накладывают довольно приличный overhead на сериализацию и десериализацию данных в памяти.

Скажем, если вы хотите применить кастомный UDF в PySpark поверх parquet-файлов в S3, ваши данные пройдут приблизительно следующий путь:
- Java-based Spark прочитает эти данные из S3 и сериализует из в Kryo-формате в памяти
- Java-based Spark сериализует (если она сериализуема, иначе вылезут ошибки сериализации) Python-функцию и прокинет ее на ноды
- Java-based Spark отправит данные на ноды для обсчета
- Данные из локального Java-based Spark процесса будут переданы в Python-based Spark процесс, и каждая запись пройдет полный путь сериализации и де-сериализации
- Python-based Spark процесс обсчитает данные и (после очередной сериализации) вернет их в Java-process

Как видно из этого описания, в процессе будет происходить куча неоптимальных операций сериализации и десериализации.

Создатель библиотеки Pandas, Wes McKinney, а так же многие другие основные контрибьюторы из таких проектов как Apache Hadoop, Apache Spark и Apache Cassandra, очевидно, не могли быть удволетворены таким перерасходом ресурсов и совершенными при имплементации текущего решения архитектурными ошибками, что собственно и послужило стартовой точкой для разработки Apache Arrow.

Пользователи PySpark уже могли сталкиваться с первыми результатами, которые дает использование Apache Arrow, если они использовали pandasUDF API.

Для меня же главный интерес представляет Arrow Flight RPC - это имплементация GRPC-сервера для передачи данных в виде flight-ов - по сути, байтовых массивов Arrow с отличной сериализацией и скоростью передачи. Такой подход позволяет ускорять процесс передачи данных между различными системами в разы.

Почитать про сам Apache Arrow можно на официальном сайте - https://arrow.apache.org/
А конечным пользователям Spark будут интересна оптимизация python-based UDF с помощью Arrow - https://spark.apache.org/docs/latest/sql-pyspark-pandas-with-arrow.html