0

J'ai été confronté à une erreur étrange avec mon travail d'allumage à l'exécution. Je ne vois rien de mal avec MyBean classe, une idée de ce qui pourrait ne pas fonctionner avec le code du pilote ci-dessous? MerciAucun constructeur/méthode applicable trouvé pour zéro paramètres réels - 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> 

Driver-

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

Runtime exception-

erreur org.codehaus.commons.compiler.CompileException: org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator org.codehaus.commons.compiler.CompileException: Fichier 'generated.java', Ligne 43, Colonne 21: Aucun constructeur/méthode applicable trouvé pour zéro paramètres réels; les candidats sont les suivants: "public int com.ts.spark.datasets.MyBean.getI()" à 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)

Répondre

1

Spark a besoin d'une classe publique JavaBean. Il semble que vous définissiez la classe MyBean dans la même classe que celle où vous créez SparkSession. Il existe deux options pour résoudre ce problème. La première option est - Créez un fichier de classe séparé pour la classe publique MyBean.java.

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

Deuxième option est - Définir MyBean comme classe interne statique publique de votre classe principale comme ci-dessous.

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

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

Merci cela a fonctionné –