jha*_*ldt 10 scala apache-spark
将复杂的地图操作表示为代码中的一系列链式地图任务而不是一个大型操作通常更为清晰.我知道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()
Run Code Online (Sandbox Code Playgroud)
这个例子是否会更高效,因为一个地图操作后跟一个distinct()?
我想我会把我的评论变成答案,因为没有其他人决定回答。基本上,这是惰性 DAG 架构的要点之一。由于在看到最终的 DAG 之前不会执行任何操作,因此不需要洗牌的组合操作之类的优化相对来说是微不足道的(我将看看是否能找到实际的代码)。假设你有一堆连续的映射,spark 知道它可以丢弃前一个映射的结果,除非你缓存,缓存可以防止 RDD 在你多次使用时重新计算。因此,合并到 1 个映射函数只不过是一种微观优化,并且当您考虑许多 MR 风格的作业都是 IO 绑定时,可能不会产生任何效果。
更新:从查看 Spark 用户列表来看,一个任务似乎Stage可以有多个任务,特别是可以像地图一样链接在一起的任务可以放入一个阶段。
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |