2017-03-10 13 views
0

Sparkでサードパーティのライブラリ(Wiremock)を使用します。ただし、次の例外があります。Sparkでシリアル化できないサードパーティ製ライブラリの使用方法

Caused by: java.io.NotSerializableException:com.github.tomakehurst.wiremock.WireMockServer 
Serialization stack: 
    - object not serializable(class:com.github.tomakehurst.wiremock.WireMockServer, value: [email protected]) 

これに対処する一般的な方法はありますか?

答えて

0

は、いくつかのオプションがあります:

  1. Kryoは、それらの内側に何によっては、箱から出して、これらのオブジェクトをシリアル化することができるかもしれません。 http://spark.apache.org/docs/latest/tuning.html
  2. これが機能しない場合は、Serializableを実装する独自の「ラッパー」オブジェクト、またはcom.github.tomakehurst.wiremock.WireMockServerのサブクラスを作成することができます。元のライブラリを変更する必要はありません。
  3. ライブラリに独自のシリアル化関数がある場合は、ラッパーオブジェクト内の関数を使用することもできます。 SparkがHadoopのWritablesをシリアライズ可能にする例については、https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/SerializableWritable.scalaを見てください。
0

フィールドをシリアル化できないようにすることができますtransient。それからそれはちょうどシリアル化されません。

private transient WireMockServer wireMockServer; 
関連する問題