为什么MicroBatchReader必须是可序列化的?任务无序列化错误

时间:2018-06-01 19:43:54

标签: java apache-spark apache-spark-sql spark-structured-streaming

我正在练习在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中序列化的实例变量,即SocketThread。有没有办法解决?此外,来源socket batch reader implementation似乎也未实现Serializable

1 个答案:

答案 0 :(得分:0)

更新:我有这样的类结构

public class ... implements DataSourceV2, ... {
    private class ... implements MicroBatchReader {

    }
}

将我的MicroBatchReader移到DataSourceV2之外为我工作。

public class ... implements DataSourceV2, ... {

}
private class ... implements MicroBatchReader {

}