如何理解 spark-shell 中 take() 的进度条
How to understand the progress bar for take() in spark-shell
我从spark-shell调用了RDD[LabeledPoint]
的take()
方法,这对spark来说似乎是一项费力的工作。
spark-shell 显示 进度条:
进度条一次又一次地填满,我不知道如何根据上面的数字合理估计所需时间(或总进度)。
有谁知道这些数字是什么意思?
提前致谢。
数字显示 运行ning 的 Spark 阶段、阶段中已完成、正在进行的任务和总任务数。 (看
What do the numbers on the progress bar mean in spark-shell? 更多关于进度条。)
Spark 并行执行 运行 个任务。在您的情况下,目前有 5 个任务 运行ning 并行。如果每个任务花费的时间大致相同,这应该让您了解您需要等待多长时间才能完成此阶段。
但是RDD.take
可以采取不止一个阶段。 take(1)
会先得到第一个分区的第一个元素。如果第一个分区为空,它将从第二个、第三个、第四个和第五个分区中取出第一个元素。它在每个阶段查看的分区数是已检查分区数的 4 倍。因此,如果您有很多空分区,take(1)
可能需要多次迭代。例如,如果您有大量数据,可能就是这种情况,然后执行 filter(_.name == "John").take(1)
.
如果您知道结果会很小,可以使用 collect
而不是 take(1)
来节省时间。这将始终在一个阶段收集所有数据。主要优点是在这种情况下,所有分区都将并行处理,而不是 take
.
的某种顺序方式。
我从spark-shell调用了RDD[LabeledPoint]
的take()
方法,这对spark来说似乎是一项费力的工作。
spark-shell 显示 进度条:
进度条一次又一次地填满,我不知道如何根据上面的数字合理估计所需时间(或总进度)。
有谁知道这些数字是什么意思?
提前致谢。
数字显示 运行ning 的 Spark 阶段、阶段中已完成、正在进行的任务和总任务数。 (看 What do the numbers on the progress bar mean in spark-shell? 更多关于进度条。)
Spark 并行执行 运行 个任务。在您的情况下,目前有 5 个任务 运行ning 并行。如果每个任务花费的时间大致相同,这应该让您了解您需要等待多长时间才能完成此阶段。
但是RDD.take
可以采取不止一个阶段。 take(1)
会先得到第一个分区的第一个元素。如果第一个分区为空,它将从第二个、第三个、第四个和第五个分区中取出第一个元素。它在每个阶段查看的分区数是已检查分区数的 4 倍。因此,如果您有很多空分区,take(1)
可能需要多次迭代。例如,如果您有大量数据,可能就是这种情况,然后执行 filter(_.name == "John").take(1)
.
如果您知道结果会很小,可以使用 collect
而不是 take(1)
来节省时间。这将始终在一个阶段收集所有数据。主要优点是在这种情况下,所有分区都将并行处理,而不是 take
.