2016-03-22 19 views
8

com.esotericsoftware.kryo.Serializer'dan read() ve write() yöntemlerini uygulayarak özel bir Kryo serializer uygulayan bir sınıfa sahibim (aşağıdaki örneğe bakın). Bu özel seri hale getiriciyi Spark ile nasıl kaydedebilirim?Spark Kryo: Özel bir seri hale getirici kaydetme

val sparkConf = new SparkConf() 
sparkConf.registerKryoClasses(Array(classOf[A])) 

Maalesef Kıvılcım bana özel seri hale kayıt seçeneği vermez: Spark Şimdi

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 

: Burada

sahip olduğumun bir sudo-kod örneği . Bunu yapmanın bir yolu var mı?

package com.acme 

class MyRegistrator extends KryoRegistrator { 
    override def registerClasses(kryo: Kryo) { 
    kryo.register(classOf[A], new CustomASerializer()) 
    } 
} 

Ardından, registrator en tam nitelikli adını, örn spark.kryo.registrator ayarlayın:

+0

spark.kryo.classesToRegister – Sohaib

+1

[Bu cevap] (bak http://stackoverflow.com/questions/32667068/save-spark-dataframe-into-elasticsearch-can-t-handle-type -exception) sorunuza doğrudan bir cevap değildir, ancak sağlanan açıklama kıvılcımdaki özel seri hale getirici kaydı hakkında size daha fazla bilgi verecektir. – eliasah

cevap

11

kayıtlı bu özel seri hale ile kendi KryoRegistrator oluştur com.acme.MyRegistrator:

val conf = new SparkConf() 
conf.set("spark.kryo.registrator", "com.acme.KryoRegistrator") 
+0

Bu, sorunu çözüyor. Teşekkürler! – marios

+1

Bu kıvılcım dökümantasyonunda çok net değil, ama kesinlikle işe yarıyor. Eğer bir kıvılcım oluşturucu ile Spark serisinde bir seri serileştiremediğimize Kryo ile sorun yaşarsanız (benim için org.apache.spark.sql.catalyst.expressions.codegen.LazilyGeneratedOrdering idi), bu sorunu çözebilir kryo.register (LazilyGeneratedOrdering.class, new JavaSerializer()) kullanarak; Teşekkür ederim! – jhnclvr

İlgili konular