Apache spark 是什么触发了Spark的工作?
我正在学习Spark如何在Databricks中工作。我知道洗牌是如何在工作中造成阶段性的,但我不知道是什么导致了工作。我认为这种关系是一次行动一份工作,但有时每次行动都会有很多工作 例如 触发两个作业,一个用于查看模式,另一个用于执行Apache spark 是什么触发了Spark的工作?,apache-spark,Apache Spark,我正在学习Spark如何在Databricks中工作。我知道洗牌是如何在工作中造成阶段性的,但我不知道是什么导致了工作。我认为这种关系是一次行动一份工作,但有时每次行动都会有很多工作 例如 触发两个作业,一个用于查看模式,另一个用于执行.show 与.groupBy相同的代码 val initialDF = spark .read
.show
与.groupBy
相同的代码
val initialDF = spark
.read
.parquet("/mnt/training/wikipedia/pagecounts/staging_parquet_en_only_clean/")
val someDF = initialDF
.groupBy($"project").sum()
someDF.show
…触发了九项工作
将.show
替换为.count
,.groupBy
版本触发两个作业,.orderBy
版本触发三个作业
很抱歉,我无法共享数据,以使其可复制,但我希望能够理解抽象地创造就业机会的规则。很高兴分享
的结果。如果有帮助,请解释。show
不带参数显示结果的前20行。
在数据集上触发show
时,它会转换为head(20)
操作,而head(20)
操作又会转换为limit(20)
操作。显示
->头部
->限制
关于限制
Spark以增量方式执行
limit
,直到满足limit查询。在第一次尝试中,它尝试从一个分区检索所需的行数。
如果未满足限制要求,则在第二次尝试中,它将尝试从4个分区检索所需的行数(由
spark.sql.limit.scaleUpFactor
,默认值4确定)。然后处理16个分区,依此类推,直到满足限制或数据耗尽
在每次尝试中,都会生成一个单独的作业
代码参考:通常情况下,它是您所说的1:1。也就是说,1个动作产生1个作业,每个阶段有1..N个阶段,每个阶段有M个任务,并且可以跳过这些阶段 然而,一些行动引发了“水下”的额外工作。例如,pivot:如果只传递列作为参数,而不传递pivot的值,则Spark必须首先获取所有不同的值,以便生成列,执行collect,即一个额外作业
show也是生成额外作业的一种特殊情况。这是@DaRkMaN,您能用
.count
对.groupBy
进行评论吗(而不是像上面提到的那样.show
?我们能检查是否生成了用于文件列表的作业吗(我相信这个操作会产生一个作业来并行化云存储列表),模式推断(设置spark.sql.hive.caseSensitiveInferenceMode=NEVER\u推断并检查作业是否减少)?我想这里更大的教训是,许多动作中都包含其他动作……因此,每个动作仍然只有一个作业,但并不总是每个动作都有一个作业。没有作业和动作的一对一映射。重读我之前写的,是的,这是一种令人困惑的说法,没有1-1映射。
val initialDF = spark
.read
.parquet("/mnt/training/wikipedia/pagecounts/staging_parquet_en_only_clean/")
val someDF = initialDF
.groupBy($"project").sum()
someDF.show