加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在打开新的SparkContext之前停止它

发布时间:2020-12-16 08:59:21 所属栏目:安全 来源:网络整理
导读:我正在使用Spark在 Scala中执行测试,创建一个SparkContext,如下所示: val conf = new SparkConf().setMaster("local").setAppName("test")val sc = new SparkContext(conf) 第一次执行后没有错误.但现在我收到此消息(以及失败的测试通知): Only one SparkC
我正在使用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()
}

}

解决方法

要停止现有上下文,可以在给定的SparkContext实例上使用 stop方法.

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读