簡體   English   中英

從 spark dataframe 插入 cassandra 表會導致 org.codehaus.commons.compiler.CompileException: File 'generated.java' 錯誤

[英]Inserting into cassandra table from spark dataframe results in org.codehaus.commons.compiler.CompileException: File 'generated.java' Error

我正在使用 spark-sql.2.4.1v、datastax-java-cassandra-connector_2.11-2.4.1.jar 和 java8。

我像這樣創建cassandra 表

create company(company_id int PRIMARY_KEY, company_name text);

JavaBean如下:

class CompanyRecord(
 Integer company_id;
 String company_name;
//getter and setters
//default & parametarized constructors
)

下面的spark 代碼將數據保存到 cassandra 表中:

Dataset<Row> latestUpdatedDs = joinUpdatedRecordsDs.select("company_id", "company_name"); /// select from other source like xls sheet

Encoder<CompanyRecord> comanyEncoder =  Encoders.bean(CompanyRecord.class);         
Dataset<CompanyRecord> inputDs = latestUpdatedDs.as(comanyEncoder );


 inputDs 
        .write()
        .format("org.apache.spark.sql.cassandra")
        .option("table","company")
        .option("keyspace",  "ks_one")
        .mode(SaveMode.Append)
        .save();

給出如下錯誤

引起:org.codehaus.commons.compiler.CompileException:文件'generated.java',第562行,第35列:編譯失敗:org.codehaus.commons.compiler.CompileException:文件'generated.java',第562行, Column 35: A method named "toString" is not declared in any enclosing class nor any supertype, nor through a static import at org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$.org$apache$spark$sql $catalyst$expressions$codegen$CodeGenerator$$doCompile(CodeGenerator.scala:1304) at org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anon$1.load(CodeGenerator.scala:1376) at org. apache.spark.sql.catalyst.expressions.codegen.CodeGenerator$$anon$1.load(CodeGenerator.ZBAAD2C48E66F BC14C61337D0B2578221Z:1373) at org.spark_project.guava.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) at org.spark_project.guava.cache.LocalCache$Segment.loadSync(LocalCache.java:2379)

問題:

如何找出這里出了什么問題? 以及如何解決這個問題?

據我了解:

第 562 行,第 35 列:名為“toString”的方法未在任何封閉的 class 或任何超類型中聲明。

This might be the issue,you might need to override toString of CompanyRecord class and also Spark works on custom objects which implement Serializable interface as mentioned in https://spark.apache.org/docs/latest/tuning.html .

這兩件事應該可以解決您的問題。

當數據類型不匹配時出現此問題,即您在表中定義的內容以及您的 bean/dataframe 嘗試插入的內容。

一旦我正確更正了數據類型,問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM