我正面臨一個奇怪的行爲。avro對象不可序列化爲一個Map的值 - Spark
即使在使用avro-1.8.0(這使avro對象可序列化)之後,Spark也無法序列化Map [String,AvroObj]中的avro對象。
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
我懷疑架構$屬性依然沒有序列化的,但是當我用我的AvroObj獨自一瓶蓋內,一切正常。另外,我也沒有問題地廣播我的地圖[String,AvroObj]。同樣,我的avro對象只包含String和long。
然後,爲了切換,我必須重建一個新的對象,從我的avro可序列化,然後我的新Map [String,MySerializableObject]沒有問題...但我失去了從avsc它增加了很多代碼。
請注意,我使用KryoRegistrator,spark-1.5.0,avro-1.8.0和scala 2.10。
我想這裏描述https://issues.scala-lang.org/browse/SI-7005
有沒有辦法通過傳遞這個問題不必重新定義一個新的對象,設置地圖爲不可變的,甚至是地圖(身份)?或者我可能錯過了什麼?
謝謝了很多, 塞巴斯蒂安