Serialization avro对象不能序列化为Map-Spark的值

Serialization avro对象不能序列化为Map-Spark的值,serialization,apache-spark,avro,Serialization,Apache Spark,Avro,我正面临一种奇怪的行为 Spark无法序列化Map[String,AvroObj]中的avro对象,即使我使用了使avro对象可序列化的avro-1.8.0 Exception in thread "main" org.apache.spark.SparkException: Task not serializable Caused by: java.io.NotSerializableException: my.avro.Object Serialization stack:

我正面临一种奇怪的行为

Spark无法序列化Map[String,AvroObj]中的avro对象,即使我使用了使avro对象可序列化的avro-1.8.0

Exception in thread "main" org.apache.spark.SparkException: Task not serializable    
Caused by: java.io.NotSerializableException: my.avro.Object
    Serialization stack:
        - object not serializable (class: my.avro.Object, value: {"A": "B", ...})
        - writeObject data (class: scala.collection.mutable.HashMap)
        - object (class scala.collection.mutable.HashMap
我怀疑SCHEMA$属性仍然不可序列化,但是当我在闭包中单独使用AvroObj时,一切都很好。此外,我广播Map[String,AvroObj]也没有问题。同样,我的avro对象只包含String和long

然后,为了进行切换,我必须从我的avro对象重建一个扩展为serializable的新对象,然后我的新映射[String,MySerializableObject]就没有问题了。。。但是我失去了从avsc生成类的可用性,它增加了很多代码

请注意,我使用的是Kryoregistor、spark-1.5.0、avro-1.8.0和scala 2.10

我试图将映射设置为不可变的,甚至如这里所述的映射(标识)

有没有办法绕过这个问题而不必重新定义新对象?或者我可能错过了什么

多谢各位,
Sebastien

此问题与任何低于1.8版本的Avro模式编译器有关。Avro生成Java类时没有实现
Serializable
接口,因此当它试图序列化这些Java对象时,这些Java对象会在Spark处导致
notserializableeexception
。 Avro 1.8.0(2016年1月22日)解决了该问题

AVRO-1502. Java: Generated classes now implement Serializable.
Generated classes need to be regenerated to use this release.