Исключение java .util.NoSuchElementException: None.get в операции сохранения набора данных Spark. - PullRequest
0 голосов
/ 19 марта 2020

Я получил исключение "java .util.NoSuchElementException: None.get", когда я пытался сохранить набор данных в хранилище s3 как паркет:

Исключение:

java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
...

Caused by: java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:347)
at scala.None$.get(Option.scala:345)
at org.apache.spark.sql.execution.datasources.BasicWriteJobStatsTracker$.metrics(BasicWriteStatsTracker.scala:173)
at org.apache.spark.sql.execution.command.DataWritingCommand$class.metrics(DataWritingCommand.scala:51)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.metrics$lzycompute(InsertIntoHadoopFsRelationCommand.scala:47)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand.metrics(InsertIntoHadoopFsRelationCommand.scala:47)
at org.apache.spark.sql.execution.command.DataWritingCommandExec.metrics$lzycompute(commands.scala:100)
at org.apache.spark.sql.execution.command.DataWritingCommandExec.metrics(commands.scala:100)
at org.apache.spark.sql.execution.SparkPlanInfo$.fromSparkPlan(SparkPlanInfo.scala:56)
at org.apache.spark.sql.execution.SQLExecution$$anonfun$withNewExecutionId$1.apply(SQLExecution.scala:76)
at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:125)
at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:73)
at org.apache.spark.sql.DataFrameWriter.runCommand(DataFrameWriter.scala:676)
at org.apache.spark.sql.DataFrameWriter.saveToV1Source(DataFrameWriter.scala:285)
at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:271)
at org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:229)
at org.apache.spark.sql.DataFrameWriter.parquet(DataFrameWriter.scala:566)

Похоже, это проблема, связанная с SparkContext. Я не создавал экземпляр SparkContext явно, вместо этого я использую SparkSession только в своем исходном коде.

final SparkSession sparkSession = SparkSession
            .builder()
            .appName("Java Spark SQL job")
            .getOrCreate();

ds.write().mode("overwrite").parquet(path);

Любые предложения или обходные пути? спасибо

Обновление 1:

Создание ds немного сложнее, но я постараюсь перечислить основные стеки вызовов, как показано ниже:

Процесс 1:

    1. session.read (). Parquet (путь) в качестве источника;
  • ds.createOrReplaceTempView (view);
  • sparkSession. sql (sql) как ds1;
  • sparkSession. sql (sql) как ds2;
  • ds1.save ()
  • ds2.save ()

Процесс 2:

После шага 6 я возвращаюсь к шагу 1 с тем же сеансом зажигания для следующий процесс. наконец, вызывается sparkSession.stop () после всей обработки.

Я могу найти журнал после завершения процесса 1, который выглядит как указание на то, что SparkContext был уничтожен до процесса 2:

INFO SparkContext: Successfully stopped SparkContext

1 Ответ

0 голосов
/ 21 марта 2020

Просто удалите sparkSession.stop (), чтобы решить эту проблему.

...