2016-06-16 12 views
1

私はsparkを使ったプロジェクトでシリアライザとしてkryoシリアライザを使用し、scalaで書かれています。私は私のプロジェクトで使用するすべてのクラスを登録していますが、シリアライズされていないクラスまたはハッシュマップにリンクされていないクラスがあります。 リンクハッシュマップ登録:リンクされたハッシュマップをシリアライズする

kryo.register(scala.collection.mutable.linkedHashMap [_、_])

私は弾性から自分のデータを取得し、プロパティの実行時の型があるのLinkedHashMap。 ドキュメントの例は次のようになります。person {age:20、name: "yarden"}、linkedHashMap [String、Any]にマップし、別のオブジェクトが存在するかどうかを確認します。

デシリアライズするときリンクされたHashMap(例えば、RDDを収集する)として格納されます。結果は空のオブジェクトに過ぎません。

私はMapSerializer(レジスタ関数の別のパラメータ)を使用しようとしましたが、java linkedHashMapのために失敗しました。 scala linkedHashMapに適したシリアライザを検索しようとしましたが見つかりませんでした。 私はLinkedHashMapをMapに変換するたびにその解決策がありますが、それは作業ですが、それは良い方法ではありません。 私はおそらく、実行時の型をmapであり、linkedHashMapではないと思うかもしれませんが、解決策が見つかりませんでした。

私はスカラーのリンクハッシュマップに適しているシリアライザを見つけることがベストプラクティスだと信じていますが、何も見つかりませんでした。

私が解決できなかったことの解決策は歓迎されます。

答えて

1

TraversibleSerializerを使用してみてください。例えば

kryo.register(classOf[mutable.LinkedHashMap[Any, Any]], 
    new TraversableSerializer[(Any, Any), mutable.LinkedHashMap[Any, Any]](true)) 
関連する問題