2017-05-24 8 views
1

Java Spark DatasetのgroupByKeyメソッドに関する問題が発生しています。Java Spark Dataset自動生成コンパイル例外

java.lang.Exception: failed to compile: org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 43, Column 21: No applicable constructor/method found for zero actual parameters; candidates are: "public int org.package.example.ExampleTest$1ExampleClass.getX()

コードである:

テスト環境でローカルに実行次のコード、(スパーク2.1.0、火花core_2.11は、-sql_2.11スパーク)、次の例外をスロー
class ExampleClass implements Serializable { 
     private int x; 
     private int y; 
     public ExampleClass() {} 
     public ExampleClass(int x, int y) {this.x = x; this.y = y;} 

     public int getX() {return x;} 

     public void setX(int x) { 
      this.x = x; 
     } 

     public int getY() { 
      return y; 
     } 

     public void setY(int y) { 
      this.y = y; 
     } 

     @Override 
     public boolean equals(Object o) { 
      if (this == o) return true; 
      if (o == null || getClass() != o.getClass()) return false; 

      ExampleClass that = (ExampleClass) o; 

      if (x != that.x) return false; 
      return y == that.y; 
     } 

     @Override 
     public int hashCode() { 
      int result = x; 
      result = 31 * result + y; 
      return result; 
     } 
    } 
    ExampleClass exampleClass1 = new ExampleClass(1, 1); 
    ExampleClass exampleClass2 = new ExampleClass(1, 2); 
    ExampleClass exampleClass3 = new ExampleClass(1, 3); 

    List<ExampleClass> exampleClasses = Lists.newArrayList(
      exampleClass1, 
      exampleClass2, 
      exampleClass3 
    ); 

    Dataset<ExampleClass> dataset = spark.createDataset(exampleClasses, Encoders.bean(ExampleClass.class)); 

    KeyValueGroupedDataset<Integer, ExampleClass> grouped = dataset.groupByKey(
      (MapFunction<ExampleClass, Integer>) ExampleClass::getX, 
      Encoders.INT() 
    ); 
} 

デフォルトのパラメータレスコンストラクタが見つからないか、何かを残しているようです。興味深いことに、整数をboxed Integersに変更すると、候補はgetY()がgetX()ではないと表示されます。

ご協力いただきありがとうございます。

EDIT:それ以上のことをいじった後、テストでネストされたクラスからExampleClassを移動して、それ自身のファイルに問題を修正します。私はまだ答えが残っているにもかかわらず、それでもなぜわからない。

答えて

関連する問題