registerTempTable 是不是会导致表被缓存?
Posted
技术标签:
【中文标题】registerTempTable 是不是会导致表被缓存?【英文标题】:Does registerTempTable cause the table to get cached?registerTempTable 是否会导致表被缓存? 【发布时间】:2016-11-07 21:59:39 【问题描述】:我有一个 sql 语句查询,它正在对许多字段进行分组。它使用的表也很大(4TB 大小)。我正在将该表注册为临时表。但是,当我将其注册为临时表时,我不知道该表是否被缓存?我也不知道如果将查询转换为 Scala 函数(例如 df.groupby().aggr()...)而不是将其作为 sql 语句,它是否更高效。有什么帮助吗?
【问题讨论】:
【参考方案1】:SQL 很可能是迄今为止最快的Databricks blog
您是否也尝试对数据帧进行分区/重新分区以查看它是否提高了性能?
关于 registerTempTable:它只在 spark 上下文中注册表。您可以通过 UI 进行检查。
val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc")
test.createOrReplaceTempView("test")
test.show()
存储是空白的
对比
val test = List((1,2,3),(4,5,6)).toDF("bla","blb","blc")
test.createOrReplaceTempView("test").cache()
test.show()
顺便说一下 registerTempTable 在 Spark 2.0 中已被弃用并已被替换为
createOrReplaceTempView
【讨论】:
当我尝试运行df.createOrReplaceTempView("test").cache()
时,我得到一个异常 AttributeError: 'NoneType' object has no attribute 'cache'
。【参考方案2】:
我有一个 sql 语句查询,它正在对许多字段进行分组。它使用的表也很大(4TB 大小)。我正在将该表注册为临时表。但是,当我将它注册为临时表时,我不知道该表是否被缓存?
registerTempTabele 或 createOrReplaceTempView 不会将数据缓存到内存或磁盘本身,除非您使用 cache() 函数。
我也不知道如果我将查询转换为 Scala 函数(例如 df.groupby().aggr()...)而不是将其作为 sql 语句,它是否更高效。有什么帮助吗?
记住sql查询中的sql术语最终调用里面的函数。因此,您是否使用代码中可用的 sql 查询术语或函数都没有关系。那是一回事。
【讨论】:
以上是关于registerTempTable 是不是会导致表被缓存?的主要内容,如果未能解决你的问题,请参考以下文章
Zeppelin SqlContext registerTempTable 问题