【问题标题】:How to understand the progress bar for take() in spark-shell如何理解 spark-shell 中 take() 的进度条
【发布时间】:2016-10-31 00:50:31
【问题描述】:

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

spark-shell 显示一个进度条

进度条一次又一次地填满,我不知道如何从上面的这些数字中得出所需时间(或总进度)的合理估计。

有谁知道这些数字是什么意思

提前致谢。

【问题讨论】:

    标签: shell apache-spark progress-bar


    【解决方案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 的某种顺序方式。

    【讨论】:

    • 我会试着弄清楚这些数字的含义。另外,我会检查take 的工作原理,因为我不能 100% 确定 4 倍的增长。
    • 谢谢。这些信息很有帮助,现在我明白了这个栏的用途以及为什么需要这么长时间。期待您对数字的补充。再次感谢。
    • 完成!这些数字已经在一个出色的 Stack Overflow 答案中进行了解释,只是有点难以找到。我已经更正了关于 take 工作原理的描述,因为我的记忆有点差。
    猜你喜欢
    • 2015-07-26
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多