gpt4 book ai didi

scala - 如何在打开新的 SparkContext 之前停止正在运行的 SparkContext

转载 作者:行者123 更新时间:2023-12-04 00:46:38 26 4
gpt4 key购买 nike

我正在使用 Spark 在 Scala 中执行测试,创建 SparkContext 如下:

val conf = new SparkConf().setMaster("local").setAppName("test")
val sc = new SparkContext(conf)

第一次执行后没有错误。但现在我收到了这条消息(以及一个失败的测试通知):
Only one SparkContext may be running in this JVM (see SPARK-2243).

看起来我需要检查是否有任何正在运行的 SparkContext 并在启动新的之前停止它(我不想允许多个上下文)。
我怎样才能做到这一点?

更新:

我试过这个,但有同样的错误(我正在从 IntellijIdea 运行测试,我在执行之前编写了代码):
val conf = new SparkConf().setMaster("local").setAppName("test")
// also tried: .set("spark.driver.allowMultipleContexts", "true")

更新 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()
}

}

最佳答案

停止现有上下文 您可以使用 stop 给定 SparkContext 上的方法实例。

import org.apache.spark.{SparkContext, SparkConf}

val conf: SparkConf = ???
val sc: SparkContext = new SparkContext(conf)
...
sc.stop()

重用现有上下文或创建新上下文 您可以使用 SparkContex.getOrCreate 方法。
val sc1 = SparkContext.getOrCreate(conf)
...
val sc2 = SparkContext.getOrCreate(conf)

在测试套件中使用时,这两种方法都可以用来实现不同的目标:
  • stop - 在 afterAll 中停止上下文方法(例如参见 MLlibTestSparkContext.afterAll )
  • getOrCreate - 在单个测试用例中获取事件实例(参见示例 QuantileDiscretizerSuite )
  • 关于scala - 如何在打开新的 SparkContext 之前停止正在运行的 SparkContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36844075/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com