說我有一個映射到傑克遜完整的數據綁定下面的Java對象:NotSerializableException傑克遜ObjectNode
public class Student implements Serializable{
private ObjectNode name; // two keys: "first_name", "last_name"
// getter and setter ...
}
而且我有試圖序列類型的閉包變量student
跟隨星火代碼由於不同的範圍而導致的Student
。
class A(student : Student) extends Serializable {
def process(input: DataFrame): Unit = {
val test = input.map { a =>
print(student)
}
}
}
這給以下錯誤:Caused by: java.io.NotSerializableException: com.fasterxml.jackson.databind.node.ObjectNode
我明白爲什麼我得到這樣的錯誤。基本上,Spark將嘗試序列化所有超出範圍的變量,也就是關閉並將其傳遞給每個執行者。但由於ObjectNode本身不是Serializable
,執行者無法獲得Student
實例。
我的問題是,我可以解決這個問題的方法是什麼?
我一直在使用Map<String, String>
代替ObjectNode
試過,但由於ObjectNode
的put
和set
只能有‘原始人’和JsonNode
的價值,它會導致錯誤,當我嘗試這樣:
ObjectNode meta_info = JsonNodeFactory.instance.objectNode();
meta_info.set("field name", student.getName());