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

时间:2017-06-28 04:48:30

标签: scala apache-spark apache-spark-sql spark-dataframe parquet

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

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

df.show(false)

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

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

enter image description here

一个是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

enter image description here

所以,我的问题是:

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

1 个答案:

答案 0 :(得分:3)

Spark两次读取文件。  1-发展架构  2-创建dataFrame

生成架构后,将创建快速的dataFrame。