2014-02-25 6 views
7

Ich versuche, Kryo-Serialisierung mit zu verwenden:Kryo Serialisierung weigert Klasse registrieren

kryo.setRegistrationRequired(true); 

Ich halte den folgenden Fehler immer sagen, dass eine bestimmte Klasse nicht registriert ist:

java.lang.IllegalArgumentException: Class is not registered: com.my.package.MyClass[] 
Note: To register this class use: kryo.register(com.my.package.MyClass[].class); 

jedoch ich melde es:

kryo.register(classOf[MyClass[_]]) 

Wenn ich Log.TRACE() gesetzt ich die folgende Ausgabe:

00:11 TRACE: [kryo] Register class ID 51: com.my.package.MyClass (com.esotericsoftware.kryo.serializers.FieldSerializer) 

Warum heißt es, es ist nicht registriert, wenn der Trace-Logger druckt, dass es registriert wurde. Ich kann keine nützliche Dokumentation zu diesem Thema finden. Hat das schon mal jemand erlebt? Wenn es hilft, ich laufe Apache Spark v0.8.1

Antwort

10

Ich habe herausgefunden, was das Problem war. Ich verwechselte die Java-Array-Syntax [] für die allgemeine Scala-Syntax []. Die Ausnahme wurde ausgelöst, seit ich kein Array von MyClass registriert habe.

So in Java

kryo.register(MyClass[].class); 

Und scala

kryo.register(classOf[ Array[ MyClass[_] ] ]) 
+0

Genau das gleiche Problem, das ich hatte. Das hat funktioniert. Vielen Dank! –