Apache spark Spark异步作业因错误而失败

Apache spark Spark异步作业因错误而失败,apache-spark,asynchronous,spark-submit,Apache Spark,Asynchronous,Spark Submit,我正在用java为spark编写代码。当我使用foreachAsyncspark时失败,并给出java.lang.IllegalStateException:无法对停止的SparkContext调用方法。 在此代码中: JavaSparkContext sparkContext = new JavaSparkContext("local","MyAppName"); JavaPairRDD<String, String> wholeTextFiles = sparkConte

我正在用java为spark编写代码。当我使用
foreachAsync
spark时失败,并给出
java.lang.IllegalStateException:无法对停止的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
        }
    });
JavaSparkContext-sparkContext=newjavasparkcontext(“local”,“MyAppName”);
javapairdd wholeTextFiles=sparkContext.wholeTextFiles(“somePath”);
foreach(新的VoidFunction(){
公共void调用(Tuple2 StringTuple2)引发异常{
//做点什么
}
});
它很好用。但在这部法典中:

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
        }
    });
JavaSparkContext-sparkContext=newjavasparkcontext(“local”,“MyAppName”);
javapairdd wholeTextFiles=sparkContext.wholeTextFiles(“somePath”);
foreachAsync(新的VoidFunction(){
公共void调用(Tuple2 StringTuple2)引发异常{
//做点什么
}
});

它返回错误。我错在哪里?

这是因为
foreachAsync
返回一个未来的对象,当您离开一个函数时,spark上下文被关闭(因为它是在本地创建的)

如果在
foreachAsync()
上调用
get()
,则主线程将等待将来完成