Klu*_*lue 12 scala apache-spark
我正在使用Spark在Scala中执行测试,创建一个SparkContext,如下所示:
val conf = new SparkConf().setMaster("local").setAppName("test")
val sc = new SparkContext(conf)
Run Code Online (Sandbox Code Playgroud)
第一次执行后没有错误.但现在我收到此消息(以及测试通知失败):
Only one SparkContext may be running in this JVM (see SPARK-2243).
Run Code Online (Sandbox Code Playgroud)
看起来我需要检查是否有任何正在运行的SparkContext并在启动一个新的之前停止它(我不想允许多个上下文).我怎样才能做到这一点?
更新:
我试过这个,但是有同样的错误(我正在运行来自IntellijIdea的测试,我在执行之前编写代码):
val conf = new SparkConf().setMaster("local").setAppName("test")
// also tried: .set("spark.driver.allowMultipleContexts", "true")
Run Code Online (Sandbox Code Playgroud)
更新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()
}
}
Run Code Online (Sandbox Code Playgroud)
zer*_*323 18
要停止现有上下文,可以stop在给定SparkContext实例上使用方法.
import org.apache.spark.{SparkContext, SparkConf}
val conf: SparkConf = ???
val sc: SparkContext = new SparkContext(conf)
...
sc.stop()
Run Code Online (Sandbox Code Playgroud)
要重用现有上下文或创建新上下文,您可以使用SparkContex.getOrCreate方法.
val sc1 = SparkContext.getOrCreate(conf)
...
val sc2 = SparkContext.getOrCreate(conf)
Run Code Online (Sandbox Code Playgroud)
在测试套件中使用时,两种方法都可用于实现不同的事物:
stop- 在afterAll方法中弯曲上下文(参见例如MLlibTestSparkContext.afterAll)
getOrCreate- 在单个测试用例中获取活动实例(例如,参见参考资料QuantileDiscretizerSuite)
| 归档时间: |
|
| 查看次数: |
26384 次 |
| 最近记录: |