没有为零实际参数找到适用的构造函数/方法 - Apache Spark Java

时间:2017-09-19 23:38:40

标签: java apache-spark apache-spark-sql spark-dataframe apache-spark-dataset

我在运行时遇到了奇怪的错误。我没有看到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;}
}

运行时异常 -

  

ERROR    org.codehaus.commons.compiler.CompileException:org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator   org.codehaus.commons.compiler.CompileException:File&#39; generated.java&#39;,   第43行,第21列:找不到零的适用构造函数/方法   实际参数;候选人是:&#34; public int   com.ts.spark.datasets.MyBean.getI()&#34;在   org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:11004)     在   org.codehaus.janino.UnitCompiler.findMostSpecificIInvocable(UnitCompiler.java:8307)     在   org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:8169)     在   org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:8071)

2 个答案:

答案 0 :(得分:2)

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
    }
}

答案 1 :(得分:0)

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

添加以下对我有用- 公共 myclass() {}