gpt4 book ai didi

scala - 如何从 map /过滤器/等执行异步操作(即返回 future )?

转载 作者:行者123 更新时间:2023-12-01 13:40:13 25 4
gpt4 key购买 nike

我有一个 DataSet.map需要从外部 REST API 拉取数据的操作。

REST API 客户端返回 Future[Int] .

是否可以拥有 DataSet.map操作以某种方式等待此 Future异步?或者我需要使用 Await.result 来阻塞线程吗? ?或者这只是没有完成的事情......即我应该尝试将API保存的数据加载到DataSet中吗?自己的,并执行 join ?

提前致谢!

编辑:

不同于:Spark job with Async HTTP call

原因:这个问题可以讨论如何以不同的方式解决问题,例如,使用第二个 DataSet和一个 join反而。此外,链接的问题不包含关于 Spark 是否可以处理异步转换 - 如果可以 - 它们应该如何构建的明确答案。

最佳答案

这是一个有趣的问题(我认为这也不是另一个问题的重复)。

是的,您可以提交 Spark 作业,也就是说 Spark 作业将异步执行(让主调用线程在调用后可以自由地做任何想做的事)。这是 SparkContext.submitJob .

是的,您可以使用相同的 SparkContext 从多个线程同时运行 Spark 作业。 ,即 SparkContext是线程安全的。

给定这两个选项,您可以拥有一个线程池(使用 java.util.concurrent.Executors )并执行 Spark 作业,然后执行异步操作,例如“从返回 Future[Int] 的外部 REST API 中提取数据”。

现在,这部分与 Spark 无关。您希望如何获得有关 Future[Int] 的结果的通知你决定。您可以 Await或者只是注册一个回调以在 Success 时被调用或 Failure发生。这取决于你,与 Spark 无关。

重要的是您将如何提交或运行 Spark 作业,因为 map单独不会这样做。 map是一种转变。我宁愿使用 foreachPartition相反,这将进行外部调用。

关于scala - 如何从 map /过滤器/等执行异步操作(即返回 future )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40932272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com