一个 Spark 应用程序何时可以创建多个作业和阶段?

fre*_*bhi 6 apache-spark pyspark

我使用 Databricks 社区版。

我的 Spark 程序创建了多个作业。为什么?我认为应该有一份工作,并且可以有多个阶段。

我的理解是,当spark程序提交时,它会创建一个JOB,多个阶段(通常每个shuffle操作都会创建一个新阶段)。下面是正在使用的代码,其中我有 2 个可能的洗牌操作(reduceByKey / SortByKey)和一个操作(Take(5))。

rdd1 = sc.textFile('/databricks-datasets/flights')
rdd2 = rdd1.flatMap(lambda x: x.split(",")).map(lambda x: (x,1)).reduceByKey(lambda x,y:x+y,8).sortByKey(ascending=False).take(5)
Run Code Online (Sandbox Code Playgroud)

Spark作业执行截图

再观察一下,工作似乎有了新的阶段(其中一些被跳过),是什么导致了新的工作创造。

Dic*_*ood 2

一般来说,每个操作都会有一个作业 - 但 sortByKey 真的很奇怪 - 从技术上讲,它是一个转换(因此应该延迟评估),但它的实现需要执行一个急切的操作 - 所以出于这个原因,你会看到一个作业为 sortByKey 加上一个任务。

这说明你看到了其中两个工作 - 我看不到第三个工作来自哪里。

(跳过的阶段是自动缓存 shuffle 结果的地方 - 这是从 Spark 1.3 开始就存在的优化)。

有关 sortByKey 内部结构的更多信息 -为什么 sortBy 转换会触发 Spark 作业?