带有Spark Streaming的窗口中的迭代计算

时间:2019-10-29 19:30:48

标签: apache-spark iteration spark-streaming windowing

我正在尝试对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支持吗?

0 个答案:

没有答案