-1

Javaでsparkのコードを書いています。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
        }
    });

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

4

1 に答える 1

3

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

呼び出すget()foreachAsync()、メイン スレッドは Future が完了するまで待機します。

于 2017-09-20T16:38:58.953 に答える