找不到针对零实际参数的适用构造函数/方法-Apache Spark Java



我在运行时的火花工作一直遇到奇怪的错误。我认为MyBean类没有任何问题,有什么想法下面的驱动程序代码有什么问题?谢谢

maven依赖项 -

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.10</artifactId>
    <version>2.1.0</version>
</dependency>

驱动程序 -

SparkSession spark = SparkSession.builder().config(conf).getOrCreate();
spark.createDataset(Arrays.asList(new MyBean(10),new MyBean(20)),
      Encoders.bean(MyBean.class)).show();

.....

class MyBean implements Serializable {
    int i;
    public MyBean(){}
    public MyBean(int i){this.i=i;}
    public int getI() {return i;}
    public void setI(int i) {this.i = i;}
}

运行时异常 -

错误 org.codehaus.commons.compiler.compileexception:org.apache.spark.sql.catalyst.expressions.codegen.codegen.codegenerator org.codehaus.commons.compiler.compileexception:文件'generated.java', 第43行,第21列:未找到适用的构造函数/方法 实际参数;候选人是:"公共int com.ts.spark.datasets.mybean.geti() org.codehaus.janino.unitcompiler.compileerror(unitcompiler.java:11004) 在 org.codehaus.janino.unitcompiler.findixpspecificiinvocable(unitcompiler.java:8307) 在 org.codehaus.janino.unitcompiler.findimethod(unitcompiler.java:8169) 在 org.codehaus.janino.unitcompiler.findimethod(unitcompiler.java:8071)

Spark需要公共Javabean类。看起来您正在定义MyBean类,其中您正在创建SparkSession。有两个选择可以解决此问题。第一个选项是 - 为MyBean.java公共类创建一个单独的类文件。

public class MyBean implements Serializable {
    int i;
    //Getters and Setters
}

第二个选项是 - 将MyBean定义为您的主要类的公共静态内部类,如下所示。

public class MyClass {
    public static void main(String[] args) {
        SparkSession spark = ...;
    }
    public static class MyBean implements Serializable {
        int i;  
        //Getters and Setters
    }
}

我在缺少默认构造函数的类定义时遇到了类似的错误。

添加以下代码对我有用 -

public myclass() {}

相关内容

  • 没有找到相关文章

最新更新