Spark Kryo: зарегистрировать пользовательский сериализатор
У меня есть класс, который реализует пользовательский сериализатор Kryo путем реализации read()
а также write()
методы из com.esotericsoftware.kryo.Serializer
(см. пример ниже). Как я могу зарегистрировать этот пользовательский сериализатор в Spark?
Вот пример псевдокода того, что у меня есть:
class A()
CustomASerializer extends com.esotericsoftware.kryo.Serializer[A]{
override def write(kryo: Kryo, output: Output, a: A): Unit = ???
override def read(kryo: Kryo, input: Input, t: Class[A]): A = ???
}
val kryo: Kryo = ...
kryo.register(classOf[A], new CustomASerializer()); // I can register my serializer
Сейчас в Spark:
val sparkConf = new SparkConf()
sparkConf.registerKryoClasses(Array(classOf[A]))
К сожалению, Spark не дает мне возможность зарегистрировать мой собственный сериализатор. Есть идеи, если есть способ сделать это?
1 ответ
Решение
Создайте свой собственный KryoRegistrator
с этим пользовательским сериализатором зарегистрирован:
package com.acme
class MyRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[A], new CustomASerializer())
}
}
Затем установите spark.kryo.registrator
на полное имя вашего регистратора, например, com.acme.MyRegistrator
:
val conf = new SparkConf()
conf.set("spark.kryo.registrator", "com.acme.KryoRegistrator")