如何使用Spark不可序列化的第三方库

时间:2017-03-10 02:55:58

标签: java apache-spark serialization wiremock

我想在Spark中使用第三方库(Wiremock)。但是,我得到以下异常:

Caused by: java.io.NotSerializableException:com.github.tomakehurst.wiremock.WireMockServer
Serialization stack:
    - object not serializable(class:com.github.tomakehurst.wiremock.WireMockServer, value: com.github.tomakehurst.wiremock.WireMockServer@51813065)

有没有一般处理方法?

2 个答案:

答案 0 :(得分:0)

选项很少:

  1. Kryo可能会将这些对象开箱即用,具体取决于它们内部的内容。尝试按照http://spark.apache.org/docs/latest/tuning.html
  2. 中的说明启用它
  3. 如果这不起作用,您可以创建自己的“包装器”对象来实现Serializable,甚至是com.github.tomakehurst.wiremock.WireMockServer的子类。无需更改原始库。
  4. 如果库有自己的序列化函数,您也可以在包装器对象中使用它们。看看https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/SerializableWritable.scala以获取Spark使Hadoop的Writable可序列化的示例。

答案 1 :(得分:0)

您可以创建不可序列化的字段transient。然后它就不会被序列化。

private transient WireMockServer wireMockServer;