Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark数据集自动生成编译异常_Java_Apache Spark - Fatal编程技术网

Java Spark数据集自动生成编译异常

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.

我遇到了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.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实现可序列化

安迪·格罗夫的荣誉: