2017-03-19 5 views
2

SparkこれはBisectingKMeansModelで、rootのフィールドがありますが、公開されていません!私は反射によりそれを取得しようとしましたが、私はNoSuchFieldExceptionを得る:スカラプライベートvalに反射でアクセスできない

Field rootField = model.getClass().getDeclaredField("root"); 
rootField.setAccessible(true); 
node = (ClusteringTreeNode) rootField.get(model); 

私は偶数フィールド列挙しようとした:

for (Field f : model.getClass().getDeclaredFields()) { 
    System.out.println(f.getName()); 
} 

をしかし、それがリストされていません。私はScalaに慣れていません、ここで何が起こっていますか?

+0

スパーク。 –

答えて

0

入手しました - rootフィールドはラップされたクラスにあります。将来のGooglerのために

ClusteringTreeNode node;  
try { 
    Field parentField = model.getClass() 
      .getDeclaredField("org$apache$spark$ml$clustering$BisectingKMeansModel$$parentModel"); 
    parentField.setAccessible(true); 
    org.apache.spark.mllib.clustering.BisectingKMeansModel parentModel = 
      (org.apache.spark.mllib.clustering.BisectingKMeansModel) parentField.get(model); 
    Field rootField = parentModel.getClass().getDeclaredField("root"); 
    rootField.setAccessible(true); 
    node = (ClusteringTreeNode) rootField.get(parentModel); 
} catch (Exception e) { 
    e.printStackTrace(); 
    return; 
} 

が、これは固定されます少なくともまで:おそらくパブリックメソッド `ルートを()`持つJava `BisectingKMeansModel`の観点からBisectingKMeansModel階層ツリー系統樹