Мы разрабатываем среду Spark, в которой мы перемещаем исторические данные в RDD-наборы.
В принципе, RDD является неизменным, только для чтения, на котором мы выполняем операции. Исходя из этого, мы переместили исторические данные в RDD, и мы делаем такие вычисления, как фильтрация/сопоставление и т.д. На таких RDD.
Теперь существует прецедент, когда подмножество данных в RDD обновляется, и мы должны пересчитать значения.
HistoricalData имеет форму RDD. Я создаю другое RDD на основе области запроса и сохраняю ссылку на это RDD в ScopeCollection
До сих пор я мог думать о нижних подходах -
Подход1: трансляция изменения:
- Для каждого запроса на изменение мой сервер выбирает область действия RDD и запускает задание
- В задании примените фазу карты на этом RDD -
2.а для каждого node в RDD выполните поиск по широковещанию и создайте новое значение, которое теперь обновляется, тем самым создавая новый RDD
2.b. теперь я делаю все вычисления снова на этом новом RDD на этапе 2.a. как умножение, сокращение и т.д.
2.c. Я сохраняю эту ссылку RDD обратно в моем ScopeCollection
Approach2: создать RDD для обновлений
- Для каждого запроса на изменение мой сервер выбирает область действия RDD и запускает задание
- В каждом RDD выполните соединение с новым RDD, имеющим изменения
- теперь я делаю все вычисления снова на этом новом RDD на шаге 2, например, умножение, сокращение и т.д.
Подход 3:
Я подумал о создании потокового RDD, где я постоянно обновляю тот же RDD и делаю повторное вычисление. Но, насколько я понимаю, он может принимать потоки от Флюма или Кафки. Если в моем случае значения генерируются в самом приложении на основе взаимодействия с пользователем. Следовательно, я не вижу никаких точек интеграции потокового RDD в моем контексте.
Любое предложение о том, какой подход лучше или какой-либо другой подход подходит для этого сценария.
ТИА!