为什么一个动作产生两个工作?

时间:2017-06-06 09:52:40

标签: performance apache-spark apache-spark-sql

我使用Spark 2.1.0。

为什么以下一个操作产生2个相同的作业(每个作业中的DAG相同)?它不应该只产生1吗?这里有代码:

val path = "/usr/lib/spark/examples/src/main/resources/people.txt"
val peopleDF = spark.
  sparkContext.
  textFile(path, 4).
  map(_.split(",")).
  map(attr => Person(attr(0), attr(1).trim.toInt)).
  toDF
peopleDF.show()

在检查发生了什么时,我在图形界面中看到了什么?我想它与所有数据帧转换有关。

1 个答案:

答案 0 :(得分:2)

虽然一般来说,在这种特殊情况下,单个SQL查询可能会导致多个Spark作业 Spark 2.3.0-SNAPSHOT 只给出一个(与您所看到的相反)。

enter image description here

Job 12也很不错,即只是一个单阶段的洗牌Spark工作。

enter image description here

每个Spark SQL的结构化查询(使用SQL或Dataset API)查看多个Spark作业的原因是Spark SQL在RDD上提供了高级API,并且可以自由地使用RDD和操作来使您的生活成为Spark开发人员和一个Spark性能调优专家更容易。在大多数情况下(特别是当你想要构建抽象时),你必须自己启动Spark工作以达到相当的性能。