在Scala中创建SparkSession时的java.lang.InterruptedException
如果我复制这个要点: 然后发出在Scala中创建SparkSession时的java.lang.InterruptedException,scala,apache-spark,Scala,Apache Spark,如果我复制这个要点: 然后发出sbt run命令,它在线路上失败 val spark=SparkSession.builder() .config(新的SparkConf().setMaster(“本地[*]”) .enableHiveSupport() .getOrCreate() 有误: Java.lang.InterruptedException 位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
sbt run
命令,它在线路上失败
val spark=SparkSession.builder()
.config(新的SparkConf().setMaster(“本地[*]”)
.enableHiveSupport()
.getOrCreate()
有误:
Java.lang.InterruptedException
位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
不知道为什么会发生这种情况。有人有什么建议吗
Scala版本是2.11.12(请参见要点中的build.sbt)Spark版本是2.3.0(同样,请参见build.sbt)
Java版本
$ java -version
java version "1.8.0_161"
该错误是因为您尚未停止创建的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.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait处的Java.lang.InterruptedException(AbstractQueuedSynchronizer.Java:2014)
你必须有以下消息了
ERROR-Utils:SparkListenerBus线程中的未捕获错误,正在停止SparkContext
这提供了错误原因的线索。thx@RameshMaharjan。我已经用这些信息更新了这个问题。我还是一个Scala/sbt新手,所以现在我不完全确定使用什么命令是正确的,尽管这是一个Scala应用程序
sbt run
。如果我注释掉这一行,而是运行一些简单的操作,比如print(“hello world”)
,那么它会按预期运行。spark submit
用于将spark应用程序(用java、scala或python编写)提交到spark集群。这不是我在这里要做的,我只是将spark用作一个库来创建spark会话,我相信这样做是有效的。它只是stacktrace的一部分,我看不出根本原因。@jamiet,我试图在我的回答中解释下面的原因:)它清楚地说明了错误的原因,我可能会质疑“清楚”这个词的用法:)