我使用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]
)
还有一个观察,工作似乎有了新的阶段(其中一些被忽略),是什么导致新的就业机会。
答案 0 :(得分:1)
通常每个动作都会有一个工作 - 但sortByKey真的很奇怪 - 它在技术上是一个转换(所以它应该被懒惰地评估)但是它的实现需要一个急切的动作来执行 - 所以出于这个原因你&#39 ;看到sortByKey的工作加上一个工作。
这说明你看到了2个工作 - 我无法看到第三个来自哪里。
(跳过的阶段是自动缓存shuffle的结果 - 这是自Spark 1.3以来一直存在的优化。)
有关sortByKey内部结构的更多信息 - Why does sortBy transformation trigger a Spark job?