Scala Spark:使用Futures将在集群模式下提前结束作业
我有一些处理队列的Spark代码;获取队列的第一个元素,使用scala Futures构造进行处理,并在未来完成时获取下一个元素。代码看起来(简化)如下:Scala Spark:使用Futures将在集群模式下提前结束作业,scala,apache-spark,Scala,Apache Spark,我有一些处理队列的Spark代码;获取队列的第一个元素,使用scala Futures构造进行处理,并在未来完成时获取下一个元素。代码看起来(简化)如下: import scala.concurrent.ExecutionContext.Implicits.global def nextExperiment() { Future { ... }.onComplete(x => nextExperiment()) } 在集群(而不是本地)上运行此代码时,它将只开始处理队列的第一个元素
import scala.concurrent.ExecutionContext.Implicits.global
def nextExperiment() {
Future { ... }.onComplete(x => nextExperiment())
}
在集群(而不是本地)上运行此代码时,它将只开始处理队列的第一个元素,然后在完成队列中的所有元素之前快速关闭上下文。但是,如果我删除Future{}
结构,它会完美地完成它应该做的事情
这是为什么?好吧,你没有显示你在哪里调用下一次体验。但是根据您看到的情况,程序可能只是从这个调用返回,继续执行到程序结束,然后完成。如果您想在程序本身完成之前等待所有期货完成