Spark 异步作业因错误而失败

Spark asynchronous job fails with error

我正在 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
        }
    });

它returns错误。我哪里错了?

这是因为 foreachAsync returns 一个 Future 对象,当你离开一个函数时,spark 上下文关闭(因为它是在本地创建的)。

如果您在 foreachAsync() 上调用 get(),那么主线程将等待 Future 完成。