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不适合. 我只是想知道,如果有人有这样的问题,你是如何解决的? 可能还有另一个解决方案,更适合火花,就像在单个主机上有多个工作节点一样. 有趣的是,你如何应对这样的挑战?谢谢. 解决方法
这是我自己的问题的答案:
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’集合包含从本机代码返回的数据,并且该工作在整个集群中完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |