什么时候Spark应用程序可以创建多个作业和阶段?

时间:2017-06-25 23:33:03

标签: apache-spark pyspark

我使用Databricks Community Edition。

My Spark程序创建多个作业。为什么?我认为应该有一个工作,它可以有多个阶段。

我的理解是,当提交spark程序时,它将创建一个JOB,多个阶段(通常每个shuffle操作的新阶段)。 下面是我有2个可能的shuffle操作(reduceByKey / SortByKey)和一个动作(Take(5))的代码。

for x, y in generator.flow(x_train, y_train, batch_size=10240):
    fit = model.fit(x, y[:, 0],
                    batch_size=1024,
                    epochs=10,
                    verbose=1,
                    validation_split=.3,
                    shuffle=True,
                    callbacks=[checkpoint]
                    )

Spark job execution screenshot

还有一个观察,工作似乎有了新的阶段(其中一些被忽略),是什么导致新的就业机会。

1 个答案:

答案 0 :(得分:1)

通常每个动作都会有一个工作 - 但sortByKey真的很奇怪 - 它在技术上是一个转换(所以它应该被懒惰地评估)但是它的实现需要一个急切的动作来执行 - 所以出于这个原因你&#39 ;看到sortByKey的工作加上一个工作。

这说明你看到了2个工作 - 我无法看到第三个来自哪里。

(跳过的阶段是自动缓存shuffle的结果 - 这是自Spark 1.3以来一直存在的优化。)

有关sortByKey内部结构的更多信息 - Why does sortBy transformation trigger a Spark job?