Spark Encoders: когда использовать бобы ()
Я столкнулся с проблемой управления памятью при использовании механизма кэширования Spark. Я в настоящее время использую Encoder
Мы с Крио и хотели узнать, поможет ли переключение на бины уменьшить размер моего кэшированного набора данных.
В основном, каковы плюсы и минусы использования bean-компонентов над сериализацией Kryo при работе с Encoder
s? Есть ли улучшения производительности? Есть ли способ сжать кэшированный Dataset
кроме кеширования с опцией SER?
Для записи, я нашел похожую тему, которая касается сравнения между ними. Однако это не входит в детали этого сравнения.
1 ответ
Когда вы сможете. В отличие от общего двоичного Encoders
, которые используют двоичную сериализацию общего назначения и хранят целые объекты в виде непрозрачных BLOB-объектов, Encoders.bean[T]
использует структуру объекта, чтобы обеспечить макет хранилища для конкретного класса.
Эта разница становится очевидной при сравнении схем, созданных с использованием Encoders.bean
а также Encoders.kryo
,
Почему это имеет значение?
- Вы получаете эффективный доступ к полям с использованием SQL API без необходимости десериализации и полной поддержки для всех
Dataset
преобразования. - С прозрачной сериализацией полей вы можете полностью использовать столбчатое хранилище, включая встроенное сжатие.
Итак, когда использовать kryo
Encoder
? В общем, когда больше ничего не работает. Лично я бы избежал этого полностью для сериализации данных. Единственное действительно полезное приложение, о котором я могу подумать, - это сериализация буфера агрегации (см., Например, Как найти среднее значение для сгруппированных столбцов Vector в Spark SQL?).