Spark如何处理部分输出任务

时间:2017-04-13 17:27:27

标签: scala apache-spark time

我目前正在测量特定转换操作的处理时间,例如:

val t0 = System.nanoTime()
val newdf = olddf.select($"text").filter(x=>x.contains(TEXT))
val newdf.show(10)
val t1 = System.nanoTime()
println("processing time:", t1-t0)

在这种情况下,因为转换后只显示10行,我想知道Spark是否足够智能,只需处理前10行,然后停止作业。

如果是这样,如何衡量整个任务的处理时间?

1 个答案:

答案 0 :(得分:2)

这里要解开很多东西:

  1. 是的,Spark通常“足够聪明”来“处理前10行,然后停止工作”
  2. 更确切地说 - 的“工作”是以“显示前10行”。导致它的转换是同一作业的一部分,仅在执行作业时执行。
  3. 您无法仅仅衡量转化(selectfilter) - 这些永远不会在某些操作的上下文之外执行(例如{{1} },showwrite等等,所以衡量“处理时间”如果你的意思是collectselect时间并没有意义 - 这些并不是真的代表任何“处理”
  4. Spark的内部模型将工作分为工作,阶段和任务 - 这些都是由Spark本身有效衡量的。所以最好使用Spark的UI(或REST API)进行此类测量,而不是尝试自己计时。