如何理解spark-shell中take()的进度条

时间:2016-02-03 08:51:09

标签: shell apache-spark progress-bar

我从 spark-shell 调用了take() RDD[LabeledPoint]方法,这对于火花似乎是一项费力的工作。

spark-shell显示进度条

spark-shell progress bar

进度条一次又一次地填满,我不知道如何根据上述数字对所需时间(或总进度)进行合理估计。

有没有人知道这些数字的含义

提前致谢。

1 个答案:

答案 0 :(得分:1)

数字显示正在运行的Spark阶段,阶段中已完成,正在进行和总计任务的数量。 (看到 What do the numbers on the progress bar mean in spark-shell?了解有关进度条的更多信息。)

Spark阶段并行运行任务。在您的情况下,目前有5个任务并行运行。如果每个任务花费的时间大致相同,那么这应该可以让您了解等待此阶段完成的时间。

RDD.take可能需要不止一个阶段。 take(1)将首先获取第一个分区的第一个元素。如果第一个分区为空,则它将从第二个,第三个,第四个和第五个分区获取第一个元素。它在每个阶段中查看的分区数是已检查的分区数的4倍。因此,如果您有大量空分区,take(1)可以进行多次迭代。例如,如果您有大量数据,则执行filter(_.name == "John").take(1)

如果您知道结果很小,则可以使用collect代替take(1)来节省时间。这将始终在一个阶段收集所有数据。主要优点是,在这种情况下,所有分区将被并行处理,而不是take的某种顺序方式。