首页 > 解决方案 > 在 Scala 中创建 SparkSession 时出现 java.lang.InterruptedException

问题描述

如果我克隆这个要点:https ://gist.github.com/jamiekt/cea2dab3ea8de91489b31045b302e011

然后发出sbt run失败就行了

val spark = SparkSession.builder()
                        .config(new SparkConf().setMaster("local[*]"))
                        .enableHiveSupport()
                        .getOrCreate()

有错误:

java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait 的 Java.lang.InterruptedException(AbstractQueuedSynchronizer.java:2014)

不知道为什么会发生这种情况。有人有建议吗?

Scala 版本是 2.11.12(参见要点中的build.sbt
Spark 版本是 2.3.0(再次参见build.sbt
Java 版本

$ java -version
java version "1.8.0_161"

标签: scalaapache-spark

解决方案


该错误是因为您尚未停止创建的sparkSession实例,并且该实例已从内存中删除,而不会在sbt run完成后立即关闭,即在成功完成代码之后。

所以你只需要

  spark.stop()

在创建实例的范围的末尾

object Application extends App{
  import DataFrameExtensions_._
  val spark = SparkSession.builder().config(new SparkConf().setMaster("local[*]")).enableHiveSupport().getOrCreate()
  //import spark.implicits._
  //val df = Seq((8, "bat"),(64, "mouse"),(-27, "horse")).toDF("number", "word")
  //val groupBy = Seq("number","word")
  //val asAt = LocalDate.now()
  //val joinedDf = Seq(df.featuresGroup1(_,_), df.featuresGroup2(_,_)).map(_(groupBy, asAt)).joinDataFramesOnColumns(groupBy)
  //joinedDf.show

  spark.stop()
}

就在之前

Java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)

您也必须有以下消息

ERROR Utils: uncaught error in thread SparkListenerBus, stopping SparkContext

这为错误的原因提供了线索。


推荐阅读