#apache-spark #apache-spark-sql
#apache-искра #apache-spark-sql
Вопрос:
В spark допустим, что в кадре данных df есть 100 записей, а df.saveAsTable(«имя файла») позволяет предположить, что в кадре данных сохранено 50 записей, и при сохранении остальных 50 записей, если произойдет какая-либо ошибка, будет ли он отменять уже сохраненные 50 записей?
В случае sql server у нас есть тран фиксации и отката. Есть ли у нас такая вещь в spark. Пожалуйста, помогите
Ответ №1:
Искра не атомарна, она все же пытается делать хорошие вещи.
Я бы посоветовал вам реализовать стратегию, аналогичную той, что используют spark и hadoop.
Создайте временную таблицу df.saveAsTable("sometablename_temp")
Как только все данные будут записаны, измените имя.
spark.sql("ALTER TABLE sometablename_temp RENAME TO sometablename;")
Это снижает риск операции. Если во время написания временной таблицы произойдет сбой, вреда не будет. Эта «фиксация» находится на уровне драйвера, и это правильный уровень для обработки сбоя от исполнителя.
Ответ №2:
Я думаю, что лучше создать свою таблицу в качестве таблицы разделов, в случае неудачи удалите этот раздел.
Комментарии:
1. Существует риск того, что за то время, пока вы не исправили проблему(с разделами), кто-то мог прочитать данные с частичными данными.