2017-05-24 1 views
1

Ich bin in Probleme mit Java GroupWayKey-Methode Spark-Dataset. Der folgende Code, wenn sie lokal in einer Testumgebung (Spark-2.1.0, Funken core_2.11, funken sql_2.11) laufen, wirft die folgende Ausnahme:Java Spark Dataset Autogen Compile-Ausnahme

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()

-Code ist:

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

Es sieht so aus, als ob es den standardmäßigen Konstruktor ohne Parameter nicht finden kann, oder ich lasse etwas aus. Auch interessant, wenn ich die Ints in Boxed Integers ändere, heißt es, der Kandidat sei getY() not getX().

Jede Hilfe wird sehr geschätzt!

BEARBEITEN: Nachdem ich mit etwas mehr herumgemacht habe, behebt das Verschieben von ExampleClass aus einer verschachtelten Klasse in meinem Test und in eine eigene Datei das Problem. Ich weiß immer noch nicht warum, aber alle Antworten werden immer noch geschätzt.

Antwort