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

scala – Spark是否优化了链式转换?

发布时间:2020-12-16 08:55:42 所属栏目:安全 来源:网络整理
导读:将复杂的地图操作表示为代码中的一系列链式地图任务而不是一个大型操作通常更为清晰.我知道Spark DAG Scheduler会执行优化,但它是否也会以这种方式优化链接操作? 这是一个人为的例子,其中从CSV字段中提取了不同日期的列表: csv.map(row = row.split(","))
将复杂的地图操作表示为代码中的一系列链式地图任务而不是一个大型操作通常更为清晰.我知道Spark DAG Scheduler会执行优化,但它是否也会以这种方式优化链接操作?

这是一个人为的例子,其中从CSV字段中提取了不同日期的列表:

csv.map(row => row.split(","))
   .map(row => row(6)) // extract the proper field
   .map(date_field => DateTime.parse(date_field).withTimeAtStartOfDay())
   .distinct()

这个示例是否会更有效,因为一个map操作后跟一个distinct()?

解决方法

猜猜我会把我的评论变成答案,因为没有其他人决定回答.基本上这是具有惰性DAG架构的要点之一.因为在看到最终的DAG之前不会执行任何操作,所以优化组合操作不需要随机播放是相对微不足道的(我会看看我是否可以找到实际的代码).假设你有一堆连续的地图,火花知道它可以丢弃前一个地图的结果,除非你缓存,缓存可以防止RDD不必重新计算,如果你不止一次使用它.因此,合并到1个地图函数将不会超过微优化,并且当您考虑许多MR样式作业是IO绑定时可能没有效果.

更新:从查看spark用户列表看,一个Stage似乎可以有多个任务,特别是可以像地图一样链接在一起的任务可以放在一个阶段.

(编辑:李大同)

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

    推荐文章
      热点阅读