在执行spark sql之前高速缓存表已提前

时间:2016-02-15 20:09:53

标签: caching apache-spark apache-spark-sql

我们正在做一个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

我想知道缓存真的有什么作用?我们知道缓存也很懒,它发生在第一个动作。使用不同的虚拟动作和不同的查询会有什么不同吗?

0 个答案:

没有答案