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

scala – 在Spark中使用Futures

发布时间:2020-12-16 09:24:51 所属栏目:安全 来源:网络整理
导读:Spark作业为RDD中的每个元素创建远程Web服务.一个简单的实现可能看起来像这样: def webServiceCall(url: String) = scala.io.Source.fromURL(url).mkStringrdd2 = rdd1.map(x = webServiceCall(x.field1)) (上面的例子一直很简单,不处理超时). RDD的不同元
Spark作业为RDD中的每个元素创建远程Web服务.一个简单的实现可能看起来像这样:

def webServiceCall(url: String) = scala.io.Source.fromURL(url).mkString
rdd2 = rdd1.map(x => webServiceCall(x.field1))

(上面的例子一直很简单,不处理超时).

RDD的不同元素的任何结果之间没有相互依赖性.

通过使用Futures通过对RDD的每个元素并行调用Web服务来优化性能,可以改善上述内容吗?或者Spark本身是否具有内置的优化级别,以便它将并行运行RDD中每个元素的操作?

如果可以使用Futures优化上述内容,是否有人会有一些代码示例显示在传递给Spark RDD的函数中使用Futures的正确方法.

谢谢

解决方法

Or does Spark itself have that level of optimization built in,so that it will run the operations on each element in the RDD in parallel?

它没有. Spark在分区级别并行化任务,但默认情况下,每个分区在单个线程中按顺序处理.

Would the above be improved by using Futures

这可能是一种改进,但很难做到这一点.尤其是:

>在进行任何重组之前,每个Future都必须在同一阶段完成.
>鉴于用于公开分区数据的迭代器的惰性,你不能像地图那样使用高级原语(参见例如Spark job with Async HTTP call).>您可以使用mapPartitions构建自定义逻辑,但是您必须处理非延迟分区评估的所有后果.

(编辑:李大同)

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

    推荐文章
      热点阅读