我有一个镶木地板文件,名为test.parquet
。它包含一些整数。当我使用以下代码读取它时:为什么spark.read.parquet()运行2个工作?
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
:
所以,我的问题是:
- 为什么第一种方法执行2个工作,而第二种方法只执行一个?
- 而且,为什么第二种方法比第一种方法更快?
如果您正在按顺序执行这些命令,首先要加载然后显示df。这是2个不同的任务。如果你要求spark再次读取该文件。那么他已经有了它的执行计划,即使是垃圾收集器没有清理的数据也是如此,因此唯一能够执行的任务就是显示数据。 – eliasah
@eliasah你在谈论为什么第二种方法更快?因为当我颠倒了以上两种方法的执行顺序时,第二种方法比第一种方法更快。 – himanshuIIITian
那么,我的评论说 – eliasah