Java Spark数据集自动生成编译异常
我遇到了JavaSpark数据集的groupByKey方法的问题。以下代码在测试环境(Spark 2.1.0、Spark-core_2.11、Spark-sql_2.11)中本地运行时引发以下异常:Java Spark数据集自动生成编译异常,java,apache-spark,Java,Apache Spark,我遇到了JavaSpark数据集的groupByKey方法的问题。以下代码在测试环境(Spark 2.1.0、Spark-core_2.11、Spark-sql_2.11)中本地运行时引发以下异常: java.lang.Exception:未能编译:org.codehaus.commons.compiler.CompileException:文件'generated.java',第43行,第21列:未找到适用于零实际参数的构造函数/方法;候选项为:“public int org.package.
java.lang.Exception:未能编译:org.codehaus.commons.compiler.CompileException:文件'generated.java',第43行,第21列:未找到适用于零实际参数的构造函数/方法;候选项为:“public int org.package.example.ExampleTest$1ExampleClass.getX()
代码是:
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()
);
}
class ExampleClass实现可序列化{
私人INTX;
私营企业;
公共示例类(){}
公共示例类(intx,inty){this.x=x;this.y=y;}
public int getX(){return x;}
公共无效集合x(整数x){
这个.x=x;
}
公共int getY(){
返回y;
}
公共空间设置(整数y){
这个。y=y;
}
@凌驾
公共布尔等于(对象o){
如果(this==o)返回true;
如果(o==null | | getClass()!=o.getClass())返回false;
ExampleClass that=(ExampleClass)o;
如果(x!=that.x)返回false;
返回y==that.y;
}
@凌驾
公共int hashCode(){
int结果=x;
结果=31*结果+y;
返回结果;
}
}
ExampleClass ExampleClass 1=新的ExampleClass(1,1);
ExampleClass ExampleClass 2=新的ExampleClass(1,2);
ExampleClass ExampleClass 3=新的ExampleClass(1,3);
List exampleClasses=Lists.newArrayList(
例1,
例2,
例3
);
Dataset Dataset=spark.createDataset(exampleClasses,Encoders.bean(ExampleClass.class));
KeyValueGroupedDataset grouped=dataset.groupByKey(
(MapFunction)ExampleClass::getX,
Encoders.INT()
);
}
看起来它找不到默认的无参数构造函数,或者我遗漏了一些东西。同样有趣的是,如果我将int改为带框整数,它会说候选的是getY()而不是getX()
非常感谢您的帮助
编辑:在对它进行了更多的处理之后,将
ExampleClass
移出我测试中的嵌套类并放入其自己的文件中可以修复问题。尽管如此,我仍然不知道为什么仍然会得到任何答案。我也有同样的问题。我和你的问题是,您的类没有用p声明public
修改器
public类ExampleClass实现可序列化
安迪·格罗夫的荣誉: