为什么 spark.read.parquet() 运行 2 个作业?

Why spark.read.parquet() runs 2 jobs?

我有一个镶木地板文件,名为 test.parquet。它包含一些整数。当我使用以下代码阅读它时:

val df = spark.read.parquet("test.parquet")

df.show(false)

+---+
|id |
+---+
|11 |
|12 |
|13 |
|14 |
|15 |
|16 |
|17 |
|18 |
|19 |
+---+

在日志中,它显示了 2 个已执行的作业。它们如下:

一个是 parquet 工作,另一个是 show 工作。然而,当我使用以下代码读取镶木地板文件时:

val df = spark.read.schema(StructType(List(StructField("id",LongType,false)))).parquet("test.parquet")

df.show(false)

+---+
|id |
+---+
|11 |
|12 |
|13 |
|14 |
|15 |
|16 |
|17 |
|18 |
|19 |
+---+

只执行了一个作业,即show:

那么,我的问题是:

  1. 为什么第一种方法执行 2 个作业而第二种方法只执行一个作业?
  2. 而且,为什么第二种方法比第一种方法快?

Spark 读取文件两次。 1- 发展模式 2- 创建数据框

生成模式后,将快速创建数据帧。