Spark Encoders: когда использовать бобы ()

Я столкнулся с проблемой управления памятью при использовании механизма кэширования Spark. Я в настоящее время использую EncoderМы с Крио и хотели узнать, поможет ли переключение на бины уменьшить размер моего кэшированного набора данных.

В основном, каковы плюсы и минусы использования bean-компонентов над сериализацией Kryo при работе с Encoders? Есть ли улучшения производительности? Есть ли способ сжать кэшированный Dataset кроме кеширования с опцией SER?

Для записи, я нашел похожую тему, которая касается сравнения между ними. Однако это не входит в детали этого сравнения.

1 ответ

Решение

Когда вы сможете. В отличие от общего двоичного Encoders, которые используют двоичную сериализацию общего назначения и хранят целые объекты в виде непрозрачных BLOB-объектов, Encoders.bean[T] использует структуру объекта, чтобы обеспечить макет хранилища для конкретного класса.

Эта разница становится очевидной при сравнении схем, созданных с использованием Encoders.bean а также Encoders.kryo,

Почему это имеет значение?

  • Вы получаете эффективный доступ к полям с использованием SQL API без необходимости десериализации и полной поддержки для всех Dataset преобразования.
  • С прозрачной сериализацией полей вы можете полностью использовать столбчатое хранилище, включая встроенное сжатие.

Итак, когда использовать kryoEncoder? В общем, когда больше ничего не работает. Лично я бы избежал этого полностью для сериализации данных. Единственное действительно полезное приложение, о котором я могу подумать, - это сериализация буфера агрегации (см., Например, Как найти среднее значение для сгруппированных столбцов Vector в Spark SQL?).

Другие вопросы по тегам