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
を移動して、それ自身のファイルに問題を修正します。私はまだ答えが残っているにもかかわらず、それでもなぜわからない。