web-dev-qa-db-ja.com

Spark Kryo:カスタムシリアライザーを登録する

_com.esotericsoftware.kryo.Serializer_のread()メソッドとwrite()メソッドを実装することでカスタムKryoシリアライザーを実装するクラスがあります(以下の例を参照)。 このカスタムシリアライザーを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には、カスタムシリアライザーを登録するオプションがありません。これを行う方法があるかどうか考えてみてください。

11
marios

このカスタムシリアライザーを登録して、独自の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")
16
Tzach Zohar