registerTempTable会导致表被缓存吗?

时间:2016-11-07 21:59:39

标签: apache-spark apache-spark-sql

我有一个sql语句查询,它在许多字段上执行分组。它使用的表也很大(大小为4TB)。我正在将表注册为临时表。但是当我将它注册为临时表时,我不知道表是否被缓存?如果我将查询转换为Scala函数(例如df.groupby()。aggr()...)而不是将其作为sql语句,我也不知道它是否更高效。对此有何帮助?

2 个答案:

答案 0 :(得分:8)

SQL很可能是迄今为止最快的Databricks blog

您是否尝试对数据框进行分区/重新分区,以确定它是否会提高性能?

关于registerTempTable:它只在spark上下文中注册表。您可以查看用户界面。

val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc")
test.createOrReplaceTempView("test")
test.show()

存储空白

vs

val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc")
test.createOrReplaceTempView("test").cache()
test.show()

enter image description here

顺便说一句,registerTempTable在Spark 2.0中已被弃用,并已被

取代
  

createOrReplaceTempView

答案 1 :(得分:1)

  

我有一个sql语句查询,它在许多字段上执行分组。它使用的表也很大(大小为4TB)。我将表注册为临时表。但是,当我将表注册为临时表时,我不知道该表是否被缓存了?

除非使用cache()函数,否则registerTempTabele或createOrReplaceTempView不会将数据缓存到内存或光盘本身。

  

如果我将查询转换为Scala函数(例如df.groupby()。aggr()...)而不是将其作为sql语句,我也不知道它是否更高效。对此有何帮助?

请记住sql查询中的sql术语最终调用里面的函数。所以无论你使用sql查询术语还是代码中可用的函数都没关系。这是一回事。