【问题标题】:Why does a Spark query run faster when it's executed a second time?为什么 Spark 查询在第二次执行时运行得更快?
【发布时间】:2020-10-07 19:03:10
【问题描述】:

我第二次运行查询时速度明显更快。为什么?

代码:

publicvoidtest3() {
    Dataset<Row>SQLDF=spark.read().json(path:"src/main/resources/data/ipl.json");
    SQLDF.repartition(2);
    Dataset<Row>result1=SqlDF.where("run>10000").select(col:"team",...cols:"run");
    //Dataset<Row>cachedPartition=result1.cache();
    result.collect();
    //result1.show();log.info("PhysicalPlan\n"+result1.queryExecution().executedPlan());

    Dataset<Row>result2=SqlDF.where("run>10000").select(col:"team",..cols:"run");
    result2.collect();
    //result1.show();
    Log.info("PhysicalPlan\n"+result2.queryExecution().executedPlanq);
}

物理计划:

spark UI 上的执行时间:

为什么这些查询需要不同的时间,为什么执行时间有如此大的差异?缓存是否发生在幕后?如果是,为什么物理计划中没有提到?

【问题讨论】:

  • 请不要发布您的屏幕照片。代表性数据和代码应在您的帖子中以文本形式提供。您的问题是为什么第二次运行查询会更快?

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

您将 Spark 指向一个文件。第二次访问同一个文件,文件访问速度会更快。

如果你运行以下代码两次,情况是一样的(除了 Scala 使用 JVM 和 java.nio 和 java.io,当然)。

with open("src/main/resources/data/ipl.json") as f:
    t = f.read()
print(t)

第一次,必须初始化 I/O 操作。第二次,I/O 操作可以重用上次运行的部分内容。如果文件很小(就像您的情况一样),整个文件将被缓存。

【讨论】:

  • 我也猜想 JVM 的“预热”在第一次运行时需要一些时间。
猜你喜欢
  • 2017-04-06
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2011-09-30
  • 2014-10-09
相关资源
最近更新 更多