Как решить проблему максимальной ошибки глубины просмотра в Spark?

#apache-spark #pyspark

Вопрос:

У меня очень длинная задача, которая создает кучу представлений с помощью Spark SQL, и на каком-то шаге я получаю следующую ошибку: pyspark.sql.utils.AnalysisException: The depth of view foobar exceeds the maximum view resolution depth (100) .

Я искал в Google и так и не смог найти никого с подобной ошибкой.

Я попытался кэшировать, что представление foobar использует фреймы данных, но это не помогает. Я подумываю о создании временных таблиц в качестве обходного пути, так как я хотел бы не изменять текущую конфигурацию Spark, если это возможно, но я не уверен, что что-то упускаю.

ОБНОВЛЕНИЕ:
Я попытался создать таблицы в формате parquet для ссылок на таблицы, а не на представления, но все равно получаю ту же ошибку. Я применил это ко всем входным таблицам в SQL-запросе, который вызывает ошибку.

Если это имеет значение, я использую ANSI SQL, а не API python.

Ответ №1:

Я пропустил одну входную таблицу при создании физических таблиц. Как только я заметил, что ошибка исчезла, она заработала.

Поэтому я изменил свои инструкции SQL с этого:

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

Для:

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

Чтобы создать все входные таблицы для рассматриваемого оператора. Это создает файлы паркета в spark_warehouse/ .