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

Rah*_*rma 4 java apache-spark apache-spark-sql apache-spark-dataset

我的 Spark 作业在运行时遇到了奇怪的错误。我没有看到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>
Run Code Online (Sandbox Code Playgroud)

司机-

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

……

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;}
}
Run Code Online (Sandbox Code Playgroud)

运行时异常-

错误 org.codehaus.commons.compiler.CompileException:org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator org.codehaus.commons.commons.compiler.CompileException:文件“ generated.java”,第 43 行,第 21 列:否找到零实际参数的适用构造函数/方法;候选者是: org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:11004) 处的“public int com.ts.spark.datasets.MyBean.getI()” org.codehaus.janino.UnitCompiler.findMostSpecificIInvocable(UnitCompiler. java:8307) 在 org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:8169) 在 org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:8071)

aba*_*hel 10

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

public class MyBean implements Serializable {
    int i;
    //Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)

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

public class MyClass {
    public static void main(String[] args) {
        SparkSession spark = ...;
    }

    public static class MyBean implements Serializable {
        int i;  
        //Getters and Setters
    }
}
Run Code Online (Sandbox Code Playgroud)