Мы запускаем кластер Spark в режиме высокого параллелизма.ETL происходит каждый день (с использованием таблицы перезаписи вставки), и после завершения обновления таблицы пользователи получают ошибку
java.util.concurrent.ExecutionException: org.apache.spark.SparkException: задание прервано из-за сбоя этапа: задание3 на этапе 1979.0 не удалось 4 раза, последний сбой: java.io.FileNotFoundException: dbfs: /mnt//part-00005-tid-4461101917811947515-c134ab13-e390-452f-a490-565fe8cc14cf-38198.c000.snappy.parquet.Возможно, базовые файлы были обновлены.Вы можете явно аннулировать кэш в Spark, запустив команду «REFRESH TABLE tableName» в SQL или воссоздав соответствующий набор данных / DataFrame.
Чтобы решить эту проблему, пользователям необходимо явно запустить обновление таблицы.
Я пробовал разные методы
1) Перезапуск кластера - это не идеально, если у вас есть несколько заданий, работающих
2) Запуск таблицы Refresh сразу после завершения обновления таблицы: Хотяэто решает проблему в пределах одного сеанса, это не работает, если у вас есть несколько открытых сеансов / записных книжек, обращающихся к одной и той же таблице.
Другой альтернативой является использование таблиц Delta, но требования не позволяют нам это делать.
Как сделать кеш недействительным для всех пользователей, обращающихся к таблице, чтобы им не приходилось запускать команду обновления таблицы?