簡體   English   中英

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

[英]How to use 3rd party libraries which are not Serializable with Spark

我想在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)

有沒有一般的方法來處理這個?

選項很少:

  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的Writable可序列化的示例。

您可以使字段不可序列化transient 然后它就不會被序列化。

private transient WireMockServer wireMockServer;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM