加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在apache spark job中执行阻塞IO?

发布时间:2020-12-16 08:56:31 所属栏目:安全 来源:网络整理
导读:如果,当我遍历RDD时,我需要通过调用外部(阻塞)服务来计算数据集中的值?您认为如何实现这一目标? val值:Future [RDD [Double]] =未来的序列任务 我试图创建一个Futures列表,但由于RDD id不是Traversable,Future.sequence不适合. 我只是想知道,如果有人有这
如果,当我遍历RDD时,我需要通过调用外部(阻塞)服务来计算数据集中的值?您认为如何实现这一目标?

val值:Future [RDD [Double]] =未来的序列任务

我试图创建一个Futures列表,但由于RDD id不是Traversable,Future.sequence不适合.

我只是想知道,如果有人有这样的问题,你是如何解决的?
我想要实现的是在单个工作节点上获得并行性,因此我可以每秒调用该外部服务3000次.

可能还有另一个解决方案,更适合火花,就像在单个主机上有多个工作节点一样.

有趣的是,你如何应对这样的挑战?谢谢.

解决方法

这是我自己的问题的答案:

val buckets = sc.textFile(logFile,100)
val tasks: RDD[Future[Object]] = buckets map { item =>
  future {
    // call native code
  }
}

val values = tasks.mapPartitions[Object] { f: Iterator[Future[Object]] =>
  val searchFuture: Future[Iterator[Object]] = Future sequence f
  Await result (searchFuture,JOB_TIMEOUT)
}

这里的想法是,我们得到分区的集合,其中每个分区被发送到特定的工作者并且是最小的工作.每个工作包含数据,可以通过调用本机代码并发送该数据来处理.

‘values’集合包含从本机代码返回的数据,并且该工作在整个集群中完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读