【发布时间】:2020-01-20 17:54:42
【问题描述】:
我是 spark Scala 程序员。我有一个火花工作,它有完成整个工作的子任务。我想用期货来并行完成子任务。完成整个工作后,我必须返回整个工作响应。
我听说 scala Futures 是,一旦主线程执行并停止,其余线程将被杀死,并且您将得到空响应。
我必须使用 Await.result 来收集结果。但是所有的博客都告诉你应该避免 Await.result,这是一种不好的做法。
在 mycase 中使用 Await.result 是否正确?
def computeParallel(): Future[String] = {
val f1 = Future { "ss" }
val f2 = Future { "sss" }
val f3 = Future { "ssss" }
for {
r1 <- f1
r2 <- f2
r3 <- f3
} yield (r1 + r2 + r3)
}
computeParallel().map(result => ???)
根据我的理解,我们必须在 Webservice 类型的应用程序中使用 Futures,它有一个始终在运行且不会退出的进程。但就我而言,一旦逻辑执行(scala 程序)完成,它将退出。
我可以使用 Futures 来解决我的问题吗?
提前致谢
【问题讨论】:
标签: scala apache-spark apache-spark-sql future futuretask