我遇到了几个可序列化的异常,我在 Flink 的互联网和文档上做了一些搜索;有一些著名的解决方案,如瞬态、扩展可序列化等。每次异常的起源都很清楚,但就我而言,我无法找到它没有序列化的确切位置。
问:我应该如何调试这种异常?
斯卡拉:
class executor ( val sink: SinkFunction[List[String]] {
def exe(): Unit = {
xxx.....addSink(sinks)
}
}
B.scala:
class Main extends App {
def createSink: SinkFunction[List[String]] = new StringSink()
object StringSink {
// static
val stringList: List[String] = List()
}
// create a testing sink
class StringSink extends SinkFunction[List[String]] {
override def invoke(strs: List[String]): Unit = {
// add strs into the variable "stringList" of the compagin object StringSink
}
}
new executor(createSink()).exe()
// then do somethings with the strings
}
例外是:
SinkFunction的实现是不可序列化的。该对象可能包含或引用不可序列化的字段。
我发现了两个可疑点:
- 的实例
StringSink
被传递到另一个文件中。 - 在 类中
StringSink
,它使用了stringList
它的 compagin 对象的静态变量。