Как обновить или даже сбросить строки в персистентной таблице с учетом нескольких одновременных считывателей?

У меня есть таблица exchangeRates, которая обновляется в пакетном режиме один раз в неделю. Это должно использоваться другими пакетными и потоковыми заданиями в разных кластерах - поэтому я хочу сохранить это как постоянную общую таблицу для общего доступа к заданиям.

allExchangeRatesDF.write.saveAsTable("exchangeRates")

Как лучше всего (для пакетного задания, которое управляет этими данными) изящно обновить содержимое таблицы (фактически полностью перезаписать его) - рассматривая различные искровые задания в качестве потребителей этого и, в частности, предлагая его использование в некоторых 24/7 структурированных потоковых потоках?

Я проверил API, возможно, мне не хватает чего-то очевидного! Скорее всего.

Спасибо!

1 ответ

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

Я думаю, что лучший способ справиться с требованием - добавить новые записи (используя insertInto) с идентификатором пакета, который будет обозначать строки, принадлежащие "новой таблице".

insertInto (tableName: String): Unit Вставляет содержимое DataFrame в указанную таблицу. Требуется, чтобы схема DataFrame совпадала со схемой таблицы.

Затем вы использовали бы пакетный идентификатор для работы со строками, как если бы они были единственными строками в наборе данных.

Другие вопросы по тегам