微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么第二次执行时Spark查询运行得更快?

如何解决为什么第二次执行时Spark查询运行得更快?

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

代码

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);
}

身体计划:

enter image description here

spark UI的执行时间:

enter image description here

为什么这些查询花费的时间不同,为什么执行时间却有如此大的差异?缓存是在后台进行的吗?如果是,为什么在物理计划中未提及?

解决方法

您正在将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操作可以重用上次运行的部分内容。如果文件很小(如您所愿),则整个文件将被缓存。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。