Scala 如何在打开新SparkContext之前停止运行SparkContext
我使用Spark在Scala中执行测试,创建SparkContext,如下所示:Scala 如何在打开新SparkContext之前停止运行SparkContext,scala,apache-spark,Scala,Apache Spark,我使用Spark在Scala中执行测试,创建SparkContext,如下所示: val conf = new SparkConf().setMaster("local").setAppName("test") val sc = new SparkContext(conf) 在第一次执行之后,没有出现错误。但现在我收到了以下消息(以及失败的测试通知): 看起来我需要检查是否有任何正在运行的SparkContext,并在启动新的SparkContext之前停止它(我不希望允许多个上下文)。 我该
val conf = new SparkConf().setMaster("local").setAppName("test")
val sc = new SparkContext(conf)
在第一次执行之后,没有出现错误。但现在我收到了以下消息(以及失败的测试通知):
看起来我需要检查是否有任何正在运行的SparkContext,并在启动新的SparkContext之前停止它(我不希望允许多个上下文)。
我该怎么做
更新:
我尝试了这一点,但出现了相同的错误(我正在运行IntellijIdea的测试,并且在执行之前生成了代码):
更新2:
class TestApp extends SparkFunSuite with TestSuiteBase {
// use longer wait time to ensure job completion
override def maxWaitTimeMillis: Int = 20000
System.clearProperty("spark.driver.port")
System.clearProperty("spark.hostPort")
var ssc: StreamingContext = _
val config: SparkConf = new SparkConf().setMaster("local").setAppName("test")
.set("spark.driver.allowMultipleContexts", "true")
val sc: SparkContext = new SparkContext(config)
//...
test("Test1")
{
sc.stop()
}
}
要停止现有上下文可以在给定的
SparkContext
实例上使用方法
import org.apache.spark.{SparkContext, SparkConf}
val conf: SparkConf = ???
val sc: SparkContext = new SparkContext(conf)
...
sc.stop()
要重用现有上下文或创建新上下文,可以使用方法
在测试套件中使用时,两种方法可用于实现不同的目标:
-在stop
方法中停止上下文(参见示例)
-在单个测试用例中获取活动实例(参见示例)getOrCreate
before
/after
块,以便在整个测试中共享相同的spark上下文,并且仅当所有测试完成时才停止上下文finished@jarandaf:请您指出在此上下文中使用之前/之后的一些示例,好吗?您可能想检查一下()虽然启动时有点“旧”,但请尝试将sc.stop()语句保留在定义sparkcontext的主函数中,并检查它是否解决了错误
class TestApp extends SparkFunSuite with TestSuiteBase {
// use longer wait time to ensure job completion
override def maxWaitTimeMillis: Int = 20000
System.clearProperty("spark.driver.port")
System.clearProperty("spark.hostPort")
var ssc: StreamingContext = _
val config: SparkConf = new SparkConf().setMaster("local").setAppName("test")
.set("spark.driver.allowMultipleContexts", "true")
val sc: SparkContext = new SparkContext(config)
//...
test("Test1")
{
sc.stop()
}
}
import org.apache.spark.{SparkContext, SparkConf}
val conf: SparkConf = ???
val sc: SparkContext = new SparkContext(conf)
...
sc.stop()
val sc1 = SparkContext.getOrCreate(conf)
...
val sc2 = SparkContext.getOrCreate(conf)