В Spark по умолчанию используется java-сериализация, если kryo настолько эффективен, почему он не установлен по умолчанию. Есть ли какие-то недостатки использования kryo или в каких сценариях мы должны использовать сериализацию kryo или java?
Каковы плюсы и минусы сериализации java и сериализации kryo?
Ответы (2)
Вот комментарий из документации:
Kryo значительно быстрее и компактнее, чем сериализация Java (часто до 10x), но не поддерживает все типы Serializable и требует, чтобы вы заранее регистрировали классы, которые вы будете использовать в программе, для лучшей производительности.
Таким образом, он не используется по умолчанию, потому что:
- Не каждый
java.io.Serializable
поддерживается "из коробки" - если у вас есть собственный класс, расширяющийSerializable
, он все равно не может быть сериализован с помощью Kryo, если не зарегистрирован. - Необходимо зарегистрировать пользовательские классы.
Примечание согласно документации:
Spark автоматически включает сериализаторы Kryo для многих часто используемых базовых классов Scala, описанных в AllScalaRegistrar, из библиотеки Twitter chill. .
Kryo Pros: потребление памяти низкое
Время kryo не работало для меня, как это было, когда я имел дело с протобуфами Google. Вот когда мне пришлось сначала зарегистрировать прото-класс
https://mvnrepository.com/artifact/de.javakaffee/kryo-serializers/0.45