Как обновить или даже сбросить строки в персистентной таблице с учетом нескольких одновременных считывателей?
У меня есть таблица exchangeRates, которая обновляется в пакетном режиме один раз в неделю. Это должно использоваться другими пакетными и потоковыми заданиями в разных кластерах - поэтому я хочу сохранить это как постоянную общую таблицу для общего доступа к заданиям.
allExchangeRatesDF.write.saveAsTable("exchangeRates")
Как лучше всего (для пакетного задания, которое управляет этими данными) изящно обновить содержимое таблицы (фактически полностью перезаписать его) - рассматривая различные искровые задания в качестве потребителей этого и, в частности, предлагая его использование в некоторых 24/7 структурированных потоковых потоках?
Я проверил API, возможно, мне не хватает чего-то очевидного! Скорее всего.
Спасибо!
1 ответ
Я думаю, что вы ожидаете какой-то поддержки транзакций от Spark, поэтому, когда есть saveAsTable
в процессе Spark будет удерживать все записи до завершения обновления / сброса.
Я думаю, что лучший способ справиться с требованием - добавить новые записи (используя insertInto) с идентификатором пакета, который будет обозначать строки, принадлежащие "новой таблице".
insertInto (tableName: String): Unit Вставляет содержимое DataFrame в указанную таблицу. Требуется, чтобы схема DataFrame совпадала со схемой таблицы.
Затем вы использовали бы пакетный идентификатор для работы со строками, как если бы они были единственными строками в наборе данных.