Вставка в таблицу cassandra из искрового фрейма данных приводит к появлению org.codehaus.commons.compiler.CompileException: ошибка файла «generate.java» - PullRequest
1 голос
/ 28 октября 2019

Я использую spark-sql.2.4.1v, datastax-java-cassandra-connector_2.11-2.4.1.jar и java8.

Я создаю таблицу cassandra какthis:

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
)

Искровой код ниже сохраняет данные в таблицу 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: файл «Генерировано.java», строка 562, столбец35: не удалось скомпилировать: org.codehaus.commons.compiler.CompileException: файл «generate.java», строка 562, столбец 35: метод с именем «toString» не объявлен ни в каком классе, ни в каком-либо включающем классе, ни через статический типимпорт в org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator $ .org $ apache $ spark $ sql $ катализатор $ выражения $ codegen $ CodeGenerator $$ doCompile (CodeGenerator.scala: 1304) в org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator $$ anon $ 1.load (CodeGenerator.scala: 1376) в org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator $$ anon $ 1.load (CodeGenerator.scala: 1373) в org.spark_project.guava.cache.LocalCache $ LoadingValueReference.loadFuture (LocalCache.java:3599) в org.spark_project.guava.cache. LocalCache $ Segment.loadSync (LocalCache.java:2379)

Вопрос:

Как выяснить, что здесь не так? И как это исправить?

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Насколько я понимаю:

Строка 562, столбец 35: метод с именем "toString" не объявлен ни в каком классе, ни в каком-либо супертипе.

Это можетВ этом случае вам может потребоваться переопределить toString класса CompanyRecord, а также Spark работает с пользовательскими объектами, которые реализуют интерфейс Serializable, как указано в https://spark.apache.org/docs/latest/tuning.html.

. Эти две вещи должны решить вашу проблему.

0 голосов
/ 29 октября 2019

Эта проблема возникает, когда существует несоответствие типов данных, то есть того, что вы определили в таблице, и что ваш бин / фрейм данных пытается вставить в него.

Как только я исправлю типы данных должным образом, проблема решена.

...