我正在开发基于Spark的Kafka Consumer,它以Avro格式读取数据。 接下来,是try catch代码读取和处理输入。
file1.js
代码编译正确,但是,当我尝试在Spark群集上运行代码时,我得到任务不可序列化错误。我尝试删除该功能,只是打印一些文本,但仍然存在错误。
P.S。我已检查打印消息,发现它们已被正确读取。
答案 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类型是可序列化的(当然,它不一定是你需要的,它只是一个例子)。