0

実行時に私のスパーク・ジョブに異常なエラーが発生しました。 MyBeanクラスに何か間違っているとは見受けられません。下のドライバコードで何が間違っているのでしょうか?おかげ実際のパラメータが0でないコンストラクタ/メソッドが見つかりません - 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;} 
} 

ランタイムException-

ERROR org.codehaus.commons.compiler.CompileException:org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator org.codehaus.commons.compiler.CompileException:ファイル 'generated.java' 行43、列21:0の該当するコンストラクタ/メソッドが見つかりません 実際のパラメータ。候補者は、次のとおりです。 "公共int型 com.ts.spark.datasets.MyBean.getI()" org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:11004) で org.codehaus.janino.UnitCompilerで。 findMostSpecificIInvocable org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:8071)で org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java:8169)で(UnitCompiler.java:8307)

答えて

1

Sparkには公開JavaBeanクラスが必要です。あなたがSparkSessionを作成しているのと同じクラスにMyBeanクラスを定義しているようです。この問題を解決するには2つの方法があります。最初のオプションは次のとおりです。MyBean.java public classの別のクラスファイルを作成します。

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

2番目のオプションはある - 以下のようなあなたのメインクラスのパブリック静的内部クラスとしてMyBeanを定義します。

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

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

ありがとう –

関連する問題