我正在尝试对Apache Spark流的迭代流处理进行分析。目的是创建一个窗口并对窗口元素进行计算。在Apache Flink或Apache Storm中,提供了用于执行此操作的API。例如,在Apache Storm中,函数提供了属于特定窗口的项目列表。在Apache Flink中,包含了属于该窗口的项的迭代器。但是Spark Streaming有这种功能吗?我尝试了API文档,但找不到清晰的答案。目的是我需要访问属于给定窗口的所有元素,并对这些项目进行计算。我需要在该项目列表上运行有限循环。 Apache Spark流有可能做到这一点吗?
我尝试添加一个窗口,然后添加map函数,并在驱动程序中创建一个迭代,然后在循环中运行map和process函数。但这给出了完全不同的答案。
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支持吗?