2016-04-25 12 views
4

を開く前に実行しているSparkContextを停止するには:は、どのように私は次のようにスパークがSparkContextを作成するとScalaでのテストを実行しています新しいもの

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

は、最初の実行後にエラーがありません。しかし、今、私はこのメッセージ(および失敗したテスト通知)を取得しています:私はすべての実行中のSparkContextがあるかどうかを確認し、新しいものを起動する前にそれを停止する必要があるよう

Only one SparkContext may be running in this JVM (see SPARK-2243). 

それは私が許可しない(見えます複数のコンテキスト)。 どうすればいいですか?

UPDATE:

私はこれを試してみましたが、同じエラー(私はIntellijIdeaからテストを実行していると私はそれを実行する前に、コードを作る)があります:

val conf = new SparkConf().setMaster("local").setAppName("test") 
          // also tried: .set("spark.driver.allowMultipleContexts", "true") 

UPDATE 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() 
} 

} 
+0

これは一般的なエラーです。あなたのテストフレームワークに応じて、テスト中に 'before' /' after'ブロックを使ってテスト中に同じスパークコンテキストを共有し、すべてのテストが終了したときにコンテキストを停止するようにしてください。 – jarandaf

+0

@jarandaf:この文脈で 'before/after'を使うのはどうですか? – Klue

+0

これをチェックすることもできます(https://spark-summit.org/2014/wp-content/uploads/2014/06/Testing-Spark-Best-Practices-Anupama-Shetty-Neil-Marshall.pdf)。 – jarandaf

答えて

8

既存のコンテキストを停止するには、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) 

テストスイートで使用される場合、両方の方法が異なるものを達成するために使用することができる。

+1

私の場合は動作しません。実行中のコンテキストを停止する "残忍な"方法はありますか?例えば端末からkill – Klue

+1

SparkContext.getOrCreate()throws ExceptionInIntializeError ...何が間違っていますか?私を助けてください –

関連する問題