私は奇妙な動作に直面しています。avroオブジェクトはMapの値としてシリアライズできません - Spark
avroオブジェクトをシリアライズ可能にするavro-1.8.0を使用した後でも、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
私はSCHEMA $属性がまだ直列化可能ではないと思われるが、私はクロージャ内の一人で、私のAvroObjを使用する場合、すべてがうまく動作します。また、Map [String、AvroObj]も問題なくブロードキャストしました。ここでも、私のavroオブジェクトにはStringとlongのみが含まれています。
次に、私のavroオブジェクトからシリアライズ可能な新しいオブジェクトを再構築する必要があります。そして、新しいMap [String、MySerializableObject]は問題ありません...しかし、私はavscからclasse生成の使い勝手を失ったそれは多くのコードを追加します。
私はKryoRegistrator、spark-1.5.0、avro-1.8.0、scala 2.10を使用しています。
私がして、新しいオブジェクトを再定義することなく、この問題を渡す方法があり、ここでhttps://issues.scala-lang.org/browse/SI-7005
説明するように、不変、あるいはマップ(アイデンティティ)としてマップを設定しようとしましたか?または私は何かを逃したかもしれませんか?
はあなたにたくさんありがとう、 セバスチャン