Spark数据缓存?

xzlaal3s  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(408)

我在sparkshell中测试下面的脚本-分区表的单分区扫描。

val s = System.nanoTime

var q =
s"""
select * from partitioned_table where part_column = 'part_column_value' 
"""

spark.sql(q).show

println("Elapsed: " + (System.nanoTime-s) / 1e9 + " seconds")

第一次执行大约需要30秒,而所有后续执行大约需要2秒。
如果我们看一下运行时统计数据,在第一次执行之前还有两个额外的作业

看起来有1212个阶段的job会扫描一个表中的所有分区(分区总数1199,这个表的hdfs文件总数1384)。
我没有找到一种方法来发现scala/java或sql代码到底在为作业0运行什么,但我怀疑它是用于缓存的。
每次我退出sparkshell并再次启动它时,我都会在第一次执行之前看到这两个额外的作业。当然,类似的观察也适用于其他查询。
问题
是否有可能证明或否定关于缓存的假设?
如果是缓存-如何禁用缓存和如何清理它?
更新。关于工作的细节。

fnx2tebb

fnx2tebb1#

问题发生在特定的spark版本2.0.2上。spark在构建计划和执行查询之前扫描了所有分区。
这些问题已在spark 2.1.0中记录并修复
https://issues.apache.org/jira/browse/spark-16980

相关问题