Я пытаюсь провести анализ итеративной потоковой обработки с использованием потоковой передачи Apache Spark. Цель состоит в том, чтобы создать окно и выполнить вычисления для оконных элементов. В Apache Flink или Apache Storm для этого предусмотрены API. Например, в Apache Storm функция предоставляет список элементов, принадлежащих конкретному окну. В Apache Flink содержится итератор элементов, принадлежащих окну. Но есть ли такая возможность с Spark Streaming? Я попробовал API документы и не смог найти четкого ответа. Цель в том, что мне нужно иметь доступ ко всем элементам, принадлежащим данному окну, и выполнять вычисления для этих элементов. Мне нужно запустить конечный цикл в этом списке элементов. Возможно ли это с помощью потоковой передачи Apache Spark?
Я попытался добавить окно, а затем функцию отображения, создать итерацию в драйвере и запустить функции отображения и обработки в цикле. Но это дает совершенно другой ответ.
for(i <- 1 to iterations) {
newWStream = trainStream.map(s => {
//mapping definition
})
val newW: DStream[ArrayBuffer[Double]] = newWStream
.reduce((w1, w2) => {
//reduce after the mapping
})
newW.foreachRDD((rdd, time) => {
// do final test
// broadcast the reduced value after evaluating it
})
}
Это самое близкое, что я могу к нему получить. Но настоящая цель не в том, чтобы сделать сопоставление для элемента, а сделать что-то вроде ниже.
stream.window().windowfunction(new WindowFunction(List<T> windowElements){
// do iterative computation
})
Поддерживает ли Spark Streaming это?