2016-09-29 1 views
1

J'ai une question indiquant que la valeur de la variable DefaultMutableTreeNode est remplacée par défaut une fois utilisée dans la fonction Spark mapToPair(). Voici mon code:Valeur DefaultMutableTreeNode définie comme valeur par défaut lors de l'utilisation de 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; 
    } 
} 

Interfaces IB, ID, les classes CB et CD sont définis comme:

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; 
    } 
} 

La question est, ce qui est arrivé à la variable de type DefaultMutableTreeNode dans CA.FuncWithSpark()? Est-ce à cause de la transformation Spark, ou les variables membres de DefaultMutableTreeNode sont-elles protégées et aucun accesseur ne leur est associé? S'il vous plaît donnez-moi une direction pour résoudre ce problème. Merci pour toute aide à l'avance !.

Répondre

0

Depuis que je suis nouveau à Apache Spark et que c'était la première fois que j'utilise la classe DefaultMutableTreeNode, je ne peux pas expliquer la cause première mais je trouve un moyen de faire fonctionner mon code. Le document de DefaultMutableTreeNode mentionne Ce n'est pas une classe de thread sûr, ce qui me fait penser à Spark, en passant des variables de type thread qui sont dangereuses du pilote aux exécuteurs peuvent échouer à passer des valeurs correctement.

Cependant, mon projet a besoin d'une structure de données comme un nœud d'arbre, donc j'ai trouvé cette implémentation générique tree node sur stackoverflow pour remplacer DefaultMutableTreeNode. Maintenant, mon code fonctionne bien.