我从 spark-shell 调用了take()
RDD[LabeledPoint]
方法,这对于火花似乎是一项费力的工作。
spark-shell显示进度条:
进度条一次又一次地填满,我不知道如何根据上述数字对所需时间(或总进度)进行合理估计。
有没有人知道这些数字的含义?
提前致谢。
答案 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
的某种顺序方式。