如何解决Spark中的最大视图深度误差



我有一个很长的任务,要使用Spark SQL创建一堆视图,在某个步骤中我得到了以下错误:pyspark.sql.utils.AnalysisException: The depth of view 'foobar' exceeds the maximum view resolution depth (100)

我一直在谷歌和SO中搜索,找不到有类似错误的人。

我已经尝试缓存视图foobar,但这没有帮助。我正在考虑创建临时表作为一种变通方法,因为如果可能的话,我不想更改当前的Spark配置,但我不确定是否遗漏了什么。

更新:我试着用镶木地板格式创建表来引用表而不是视图,但我仍然遇到了同样的错误。我将其应用于导致错误的SQL查询的所有输入表。

如果有不同的话,我使用的是ANSI SQL,而不是python API。

解决方案

使用镶木地板的桌子毕竟对我有用。我发现我仍然缺少一张桌子来坚持,所以这就是为什么它不起作用。

所以我更改了我的SQL语句:

CREATE OR REPLACE TEMPORARY VIEW `VIEW_NAME` AS
SELECT ...

收件人:

CREATE TABLE `TABLE_NAME` USING PARQUET AS
SELECT ...

将所有关键视图移动到spark_warehouse/下的镶木地板表,或您配置的任何视图。

注:

这将在主节点的磁盘上写入表。确保您有足够的磁盘,或者考虑将数据转储到s3等外部数据存储中。将此作为使用检查点的替代解决方案(现在是首选解决方案(阅读。

最新更新