【问题标题】:How to use 3rd party libraries which are not Serializable with Spark如何使用无法通过 Spark 序列化的 3rd 方库
【发布时间】:2017-03-10 02:55:57
【问题描述】:

我想在 Spark 中使用 3rd 方库 (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)

有没有通用的方法来处理这个问题?

【问题讨论】:

    标签: java apache-spark serialization wiremock


    【解决方案1】:

    有几个选项:

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

    【讨论】:

      【解决方案2】:

      您可以将不可序列化的字段设为transient。然后它就不会被序列化。

      private transient WireMockServer wireMockServer;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        相关资源
        最近更新 更多