apache-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);
}
物理计划:
spark UI 上的执行时间:
为什么这些查询需要不同的时间,为什么执行时间有这么大的差异?缓存是否发生在幕后?如果是,为什么物理计划中没有提到?
解决方案
您将 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 操作可以重用上次运行的部分内容。如果文件很小(就像您的情况一样),则整个文件将被缓存。
推荐阅读
- javascript - 无法读取 Quasar 2 中未定义的属性“原型”
- javascript - 我正在尝试使用 jest-puppeteer 自动化 paytm 的主页,但测试失败且没有任何错误。和 puppeteer 一起通过
- python - 双 X 轴在图上方和偏移
- python - Python - 加载任意设置文件 (JSON/YAML) 并使其可用于子模块
- xml - 为 Revit-BIM 互操作性工具编写带有 & 字符的 XML 文件位置
- reactjs - 没有下拉菜单的 Ant 表自定义过滤器复选框
- ios - 在 iPhone 12 Pro Max 上运行应用程序以使用 Xcode 12.5.1 M1 Mac 进行测试后应用程序崩溃
- python - 如何检查熊猫 DateTimeIndex 日期是否属于列表?
- google-cloud-ml - 上传边界框 Pascal VOC 和 IMG 文件
- javascript - 如何将对象数组转换为对象