我正在练习在Java中实现我自己的V2自定义结构化流媒体源,它只是从套接字读取文本并将其解析为具有两个字段“field1”和“field2”的JavaBean。
运行SimpleQuery时
StreamingQuery query = inStream.groupBy("field1").count().writeStream()
.outputMode("complete")
.format("console")
.start();
我收到以下错误
org.apache.spark.SparkException: Task not serializable
...
Caused by java.io.NotSerializableException: CustomStreamSource.SocketSourceV2$SocketBatchReader
Serialization stack:
...
我有一些无法在自定义SocketBatchReader中序列化的实例变量,即Socket
和Thread
。有没有办法解决?此外,来源socket batch reader implementation似乎也未实现Serializable
。
答案 0 :(得分:0)
更新:我有这样的类结构
public class ... implements DataSourceV2, ... {
private class ... implements MicroBatchReader {
}
}
将我的MicroBatchReader移到DataSourceV2之外为我工作。
public class ... implements DataSourceV2, ... {
}
private class ... implements MicroBatchReader {
}