Java DefaultMutableTreeNode值在使用它触发mapToPair时设置为默认值
我有一个问题,类型DefaultMutableTreeNode变量的值在Spark mapToPair()函数中使用后会变成默认值。这是我的密码:Java DefaultMutableTreeNode值在使用它触发mapToPair时设置为默认值,java,apache-spark,serializable,defaultmutabletreenode,Java,Apache Spark,Serializable,Defaultmutabletreenode,我有一个问题,类型DefaultMutableTreeNode变量的值在Spark mapToPair()函数中使用后会变成默认值。这是我的密码: public class CA implements Serializable{ private final JavaRDD<String> input; private final List<IB> bList; public boolean FuncWithSpark(){ /*
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;
}
}
问题是,CA.FuncWithSpark()中DefaultMutableTreeNode类型的变量发生了什么变化?是因为Spark转换,还是DefaultMutableTreeNode的成员变量受到保护而没有访问器?请给我一个解决这个问题的方向。
提前谢谢你的帮助 由于我是Apache Spark的新手,而且这是我第一次使用DefaultMutableTreeNode类,所以我无法解释根本原因,但我找到了一种让代码正常工作的方法。文档中提到这不是一个线程安全类,这让我想到Spark,将线程不安全类型的变量从驱动程序传递给执行器可能无法正确传递值
然而,我的项目需要像树节点这样的数据结构,所以我在上找到了这个通用实现来替换DefaultMutableTreeNode。现在我的代码运行良好 由于我是Apache Spark的新手,而且这是我第一次使用DefaultMutableTreeNode类,所以我无法解释根本原因,但我找到了一种让代码正常工作的方法。文档中提到这不是一个线程安全类,这让我想到Spark,将线程不安全类型的变量从驱动程序传递给执行器可能无法正确传递值 然而,我的项目需要像树节点这样的数据结构,所以我在上找到了这个通用实现来替换DefaultMutableTreeNode。现在我的代码运行良好
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;
}
}