Scala 如何优雅地提前结束Spark应用程序?
如果我有一个空的RDD,我希望我的spark应用程序能够优雅地结束。在scala中实现这一点的最佳方法是什么 当我只是使用:Scala 如何优雅地提前结束Spark应用程序?,scala,apache-spark,Scala,Apache Spark,如果我有一个空的RDD,我希望我的spark应用程序能够优雅地结束。在scala中实现这一点的最佳方法是什么 当我只是使用: if(myRDD.isEmpty){sparkSession.stop()} Spark应用程序尝试继续并抛出一个非法StageException 我是否需要系统。然后退出(0)?我是否应该在之后添加return?sparkSession.stop()只会使Spark会话无效,但不会停止作业。这就是为什么当作业(仍在运行!)尝试访问已失效的会话时,会出现非法StageEx
if(myRDD.isEmpty){sparkSession.stop()}
Spark应用程序尝试继续并抛出一个非法StageException
我是否需要系统。然后退出(0)
?我是否应该在之后添加return
?sparkSession.stop()
只会使Spark会话无效,但不会停止作业。这就是为什么当作业(仍在运行!)尝试访问已失效的会话时,会出现非法StageException
我建议使用
return
或抛出异常来提前结束作业,这比系统更安全。退出(0)
关闭SparkContext后是否尝试使用它?请发布更多的代码,这样我们就可以看到你实际上在做什么。您通常只会在整个程序完成后停止spark上下文,因此我不明白您为什么要在if语句中执行此操作。我是scala/spark的新手,请原谅,如果这是一个愚蠢的问题,那么System.exit(0)不安全的原因是什么?这不是一个愚蠢的问题,答案实际上与scala无关。抛出异常或使用return
将控制权传递给调用方,而System.exit()
终止应用程序。如果您确定自己是独立运行的,那么使用System.exit()
是可以的,尽管不赞成这样做;然而,Spark应用程序尽管看起来像独立的应用程序,但实际上是作为集群上Spark运行时的一部分运行的,您可能会终止比您预期的更多的应用程序。举个例子,看一看。