Spark中的任务不可序列化读取序列化输入

时间:2016-03-15 07:22:35

标签: java serialization apache-spark apache-kafka avro

我正在开发基于Spark的Kafka Consumer,它以Avro格式读取数据。 接下来,是try catch代码读取和处理输入。

file1.js

代码编译正确,但是,当我尝试在Spark群集上运行代码时,我得到任务不可序列化错误。我尝试删除该功能,只是打印一些文本,但仍然存在错误。

P.S。我已检查打印消息,发现它们已被正确读取。

1 个答案:

答案 0 :(得分:0)

print语句将您的RDD收集到驱动程序,以便在屏幕上打印它们。这样的任务会触发数据的序列化/反序列化。

为了使您的代码有效,avroRows Dstream中的记录必须是可序列化的类型。

例如,如果您用此替换avroRows定义,它应该有效:

JavaDStream<String> avroRows = messages.map(new Function<Tuple2<String, byte[]>, String>(){
    public String call(Tuple2<String, byte[]> tuple2){
        return tuple2._2().toString();
    }
});

我刚刚在你的记录中添加了一个toString,因为String类型是可序列化的(当然,它不一定是你需要的,它只是一个例子)。