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")
Другие вопросы по тегам