Spark:映射流程之外的操作未执行?

时间:2017-09-01 02:21:32

标签: java apache-spark lambda

我在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(从其他服务确认接收到消息。)

我找到了一种方法来解决这个问题(不是很优雅),但我很感激,如果有人能够给我一些见解,为什么在这种情况下序列化函数没有正确执行,从而使列表为空。

提前致谢!

0 个答案:

没有答案