Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在打开新SparkContext之前停止运行SparkContext_Scala_Apache Spark - Fatal编程技术网

Scala 如何在打开新SparkContext之前停止运行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之前停止它(我不希望允许多个上下文)。 我该

我使用Spark在Scala中执行测试,创建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)