Мы периодически сталкиваемся с ошибкой в искре 2.4 при сохранении управляемой таблицы от искры.
Ошибка - pyspark.sql.utils.AnalysisException: u "Невозможно создать управляемую таблицу ('hive_issue.table'). Связанное расположение ('s3: // {bucket_name} / EMRFS_WARE_TEST167_new /warehouse / hive_issue.db / table ') уже существует.; "
Шаги для воспроизведения-- 1. Создайте кадр данных из данных среднего размера искры (файл CSV 30 МБ) 2. Сохраните кадр данных в виде таблицы 3Завершите сеанс, когда вышеупомянутая операция выполняется
Примечание - Состояние завершения сеанса - просто способ воспроизвести эту проблему.В реальном времени мы сталкиваемся с этой проблемой периодически, когда выполняем одни и те же искровые задания несколько раз.Мы используем EMRFS и HDFS из кластера EMR, и мы сталкиваемся с одной и той же проблемой в обеих системах.Единственный способ исправить это - удалить целевую папку, в которой таблица будет хранить свои файлы, что для нас не вариант, и нам нужно хранить историческую информацию в таблице, поэтому мы используем режим APPEND при записи в таблицу.
Мы просмотрели документацию spark 2.4 [1] и обнаружили, что spark больше не позволяет создавать таблицы управления для непустых папок.
- Любая причина изменения поведения spatk
- Для нас это выглядит как критическое изменение, поскольку несмотря на то, что указание опции «перезаписать» не позволяет уничтожить существующие данные и создать таблицы
- Есть ли у нас какое-либо решение этой проблемы.
[1] Начиная с Spark 2.4, создание управляемой таблицы с непустым расположением не допускается.Исключение выдается при попытке создать управляемую таблицу с непустым местоположением.Если для true установлено значение spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation, восстанавливается предыдущее поведение.Эта опция будет удалена в Spark 3.0.
Спасибо, Abhijeet
from pyspark.sql import SparkSession
sc = SparkSession.builder.enableHiveSupport().getOrCreate()
df = sc.read.csv("s3://{sample-bucket}1/DATA/consumecomplians.csv")
print "STARTED WRITING TO TABLE"
# Terminate session using ctrl + c after this statement post df.write action started
df.write.mode("append").saveAsTable("hive_issue.table")
print "COMPLETED WRITING TO TABLE"