2017-08-24 40 views
1

运行我最近运行星火计划,并发现采取行动似乎没有触发所有任务的火花运行。 当我使用take,在火花UI的结果是这样的 enter image description here 虽然当我使用countenter image description here的`take`行动似乎并没有触发所有任务的火花

注意任务数的差。 我所知道的是动作触发懒惰计算,但我找不到任何记录的相关问题。我需要一些澄清,谢谢。

+1

采取的是在执行遗嘱执行人,但计数的驱动程序执行。因此它们在计数所有记录的意义上是不同的,而执行者只执行指定数量的记录而执行。 :) –

回答

1

这是正常的。 take迭代评估分区,直到它收集请求数量的记录。随着narrow dependenciesmapsflatMapsfilters),它可以只计算分区的最小数量。

例如:

sc.range(0, 100, 1, 5).map(_ % 11).filter(_ >= 2).take(1) 

仅需要一个分区进行评估

只有宽依赖性(操作需要洗牌像任何byKey或排序)需要评估多个分区:

sc.range(0, 100, 1, 5).map(_ % 11).map((_, 1)).reduceByKey(_ + _).take(1) 

将触发6个任务(5所有上游分区和1取)。

相关问题