【发布时间】:2016-10-31 00:50:31
【问题描述】:
我从 spark-shell 调用了 RDD[LabeledPoint] 的 take() 方法,这对于 spark 来说似乎是一项费力的工作。
spark-shell 显示一个进度条:
进度条一次又一次地填满,我不知道如何从上面的这些数字中得出所需时间(或总进度)的合理估计。
有谁知道这些数字是什么意思?
提前致谢。
【问题讨论】:
标签: shell apache-spark progress-bar
我从 spark-shell 调用了 RDD[LabeledPoint] 的 take() 方法,这对于 spark 来说似乎是一项费力的工作。
spark-shell 显示一个进度条:
进度条一次又一次地填满,我不知道如何从上面的这些数字中得出所需时间(或总进度)的合理估计。
有谁知道这些数字是什么意思?
提前致谢。
【问题讨论】:
标签: shell apache-spark progress-bar
数字显示正在运行的 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 的某种顺序方式。
【讨论】:
take 的工作原理,因为我不能 100% 确定 4 倍的增长。
take 工作原理的描述,因为我的记忆有点差。