我们正在做一个POC来比较不同的工具,包括spark sql,apache drill等等。 bechmark数据集包括近千个镶木地板文件。对于相同的查询,apache drill需要几秒钟,而spark sql需要超过40分钟。我猜火花sql的运行时间主要是从磁盘读取文件。实际上,POC旨在找出查询本身需要多长时间,我们有点不担心当前从磁盘读取文件的花费。我们想知道有没有办法提前缓存所有表,然后在这些缓存表上执行测试查询。我们知道缓存也是懒惰的,并且在对查询进行第一次操作后立即缓存数据。我们现在的解决方案是使用虚拟操作和虚拟查询来先缓存表,然后执行测试查询。
例如:
table1 = sqlContext.read.load(path1)
table1.registerTempTable("table1")
sqlContext.cache("table1")
result1 = sqlContext.sql("sql1")
table2 = sqlContext.read.load(path2)
table2.registerTempTable("table2")
sqlContext.cache("table2")
result2 = sqlContext.sql("sql2")
result1.show() //dummy action
result2.show() //dummy action
我想知道缓存真的有什么作用?我们知道缓存也很懒,它发生在第一个动作。使用不同的虚拟动作和不同的查询会有什么不同吗?