DefaultMutableTreeNode 值在用于 Spark mapToPair 时设置为默认值

DefaultMutableTreeNode value set to be default when use it to Spark mapToPair

我有一个问题,类型 DefaultMutableTreeNode 变量的值在 Spark mapToPair() 函数中使用后变为默认值。这是我的代码:

public class CA implements Serializable{
    private final JavaRDD<String> input;
    private final List<IB> bList;
    public boolean FuncWithSpark(){
    /* 
    !!!at this point, bList.get(0).getD().getRoot() return a valid tree node
    */
    JavaRDD<Boolean> counters = input.mapToPair(new PairFunction<String, String, List<String>>() {
          @Override
          public Tuple2<String, List<String>> call(String s) throws Exception {
              /* 
              !!!at this point, bList.get(0).getD().getRoot() return an uninitialized tree node with default values
              */
              ...
          }
      }
    }

    public CA(JavaRDD<String> input, List<IB> bList) {
        this.input = input;
        this.bList = bList;
  }
}

接口 IB、ID、类 CB 和 CD 定义如下:

public interface IB {
  ...
}
public interface ID {
  ...
}

public class CB implements IB, Serializable{
    private final ID d;
    public ID getD(){
        return this.d;
    }
}
public class CD implements ID, Serializable{
    private DefaultMutableTreeNode rootNode;

    public DefaultMutableTreeNode getRoot(){
      return this.rootNode;
    }
}

问题是,CA.FuncWithSpark()中DefaultMutableTreeNode类型的变量发生了什么?是Spark转换的缘故,还是DefaultMutableTreeNode的成员变量被保护,没有accessor?请给我一个解决这个问题的方向。 提前感谢您的帮助!

由于我是 Apache Spark 的新手,而且这是我第一次使用 DefaultMutableTreeNode class,我无法解释根本原因,但我找到了使我的代码正常工作的方法。 DefaultMutableTreeNode的文档提到This is not a thread safe class,这让我想到在Spark中,将线程不安全类型的变量从驱动程序传递给执行程序可能无法正确传递值。

但是,我的项目需要像树节点这样的数据结构,所以我找到了这个泛型 tree node implementation on Whosebug 来替换 DefaultMutableTreeNode。现在我的代码运行良好。