问题描述
我在 Pyspark (Databricks) 中看到奇怪的行为,其中新笔记本中的 sql 查询返回结果,但是当我将 LIMIT 100
应用于 sql 或 limit(100)
应用于数据框时,我得到没有结果(而我希望看到前 100 个)。
在使用相同 SELECT * FROM VIEW_XYZ
操作的单独笔记本中,我应用 limit(100)
然后缓存()数据帧。这可能是一个因素?完全不同的笔记本,但相同的 sql 查询。
我有一个假设,即 cache()
已经过度缓存了查询 SELECT * FROM VIEW_XYZ LIMIT 100
及其近两周前的结果。这是关于这个查询在我的笔记本每小时运行时返回“无”的时间。
为了测试这个假设,我想“取消缓存”查询/数据帧。如何取消缓存?
编辑:将数据库名称添加到视图 dbname.viewname
修复了它。我不知道为什么或如何。
解决方法
不要认为 cache
与您的问题有任何关系。
要取消缓存所有内容,您可以使用 spark.catalog.clearCache()
。或者尝试重启集群,cache
会在集群上持久化数据,所以如果它重启cache
将为空,你可以验证它不是cache
相关问题。
您的所有笔记本可能都连接到同一个集群,这可能会因为某些旧版本的运行时而出现随机错误。
尝试使用最新运行时创建新集群,使用旧运行时的旧集群有时会表现得很奇怪。有时输出过多和命令过多的笔记本会出现这种情况。刚开始使用新的,您可能永远不会遇到任何此类问题。
一般建议是使用 LTS 版本的运行时。 您可以阅读更多相关信息here。