2017-09-20 10 views
-1

私はjavaでスパークするコードを書いています。私はforeachAsyncを使用すると火花が失敗し、私にこのコードではjava.lang.IllegalStateException: Cannot call methods on a stopped SparkContext.スパーク非同期ジョブがエラーで失敗する

を与える:

JavaSparkContext sparkContext = new JavaSparkContext("local","MyAppName"); 
    JavaPairRDD<String, String> wholeTextFiles = sparkContext.wholeTextFiles("somePath"); 
    wholeTextFiles.foreach(new VoidFunction<Tuple2<String, String>>() { 
     public void call(Tuple2<String, String> stringStringTuple2) throws Exception { 
      //do something 
     } 
    }); 

それは正常に動作します。しかし、このコードでは:

JavaSparkContext sparkContext = new JavaSparkContext("local","MyAppName"); 
    JavaPairRDD<String, String> wholeTextFiles = sparkContext.wholeTextFiles("somePath"); 

    wholeTextFiles.foreachAsync(new VoidFunction<Tuple2<String, String>>() { 
     public void call(Tuple2<String, String> stringStringTuple2) throws Exception { 
      //do something 
     } 
    }); 

エラーを返します。どこが間違っている?

答えて

2

foreachAsyncはFutureオブジェクトを返し、関数を残すと、(ローカルに作成されているため)スパークコンテキストが閉じられます。

get()foreachAsync()に電話すると、メインスレッドは未完了を待ちます。

関連する問題