[英]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的成員變量受到保護而且沒有訪問者? 請指點我解決這個問題。 謝謝你提前幫忙!
由於我是Apache Spark的新手,並且這是我第一次使用DefaultMutableTreeNode類,我無法解釋根本原因,但我找到了一種方法來使我的代碼工作。 DefaultMutableTreeNode的文檔提到這不是一個線程安全的類 ,這讓我想到在Spark中,將從驅動程序到執行程序的線程不安全的類型傳遞可能無法正確傳遞值。
但是,我的項目需要像樹節點這樣的數據結構,所以我在stackoverflow上找到了這個通用樹節點實現來替換DefaultMutableTreeNode。 現在我的代碼運作良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.