Spark:使用Futures将在群集模式中提前结束Job

时间:2015-12-02 16:49:57

标签: scala apache-spark

我有一些处理队列的Spark代码;获取队列的第一个元素,使用scala Futures构造进行处理,并在完成Future时获取下一个元素。代码看起来(简化)如下:

import scala.concurrent.ExecutionContext.Implicits.global

def nextExperiment() {
  Future { ... }.onComplete(x => nextExperiment())
}

在集群上运行此代码(非本地)时,它只会开始处理队列的第一个元素,然后在完成队列中的所有元素之前快速关闭上下文。但是,如果我删除了Future{ }结构,它完全符合预期。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

好吧,你不能显示你打电话给nextExperiment的地方。但鉴于你所看到的,该程序可能只是从这个调用返回,继续到程序的结束,并完成。如果你想在节目本身完成you need to block until all is done之前等待所有期货完成。