我在spark项目中有一些Java代码,如下所示:
public void analyze(JavaRDD<String> rdd) {
List<String> matches = new LinkedList<>();
rdd.map(s -> {
if (isStringValid(s)) {
SerializableFunction<String, String> func = (s) -> {
matches.add(s);
return s;
}
return sendStringMsg(s, func);
}
return 0d;
}).mean();
sendCombinedMessage(matches);
}
double sendStringMsg(String s, SerializableFunction<String, String> callBack) {
if (send(s)) {
callBack.apply(s);
return 1d;
}
return 0d;
}
其中SerializableFunction<>
是一个自定义的功能接口,可扩展可序列化,sendCombinedMessage(List<String>)
是一个单独的方法,用于组合字符串列表并将组合字符串发送到不同的服务。但是当我测试它时,字符串“匹配”的列表似乎总是为空,即使send()方法返回boolean(从其他服务确认接收到消息。)
我找到了一种方法来解决这个问题(不是很优雅),但我很感激,如果有人能够给我一些见解,为什么在这种情况下序列化函数没有正确执行,从而使列表为空。
提前致谢!