как обработать исключение, возникшее при использовании dataframe.saveAsTable

#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. Существует риск того, что за то время, пока вы не исправили проблему(с разделами), кто-то мог прочитать данные с частичными данными.