0

我在运行时遇到了奇怪的错误,我没有看到MyBean类的任何错误,不知道下面的驱动程序代码有什么问题?由于找不到适用于零实际参数的构造函数/方法 - Apache Spark Java

Maven的Dependencies-

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

运行Exception-

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

回答

1

Spark需要公共JavaBean类。看起来您正在为要创建SparkSession的同一班级中定义MyBean班。有两种方法可以解决这个问题。第一个选项是 - 为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 
    } 
} 
+0

感谢它的工作 –

相关问题