我想使用大小为2的FIFO队列来存储数据流的元素。在任何情况下,我都需要流中的前一个元素而不是当前元素。为此,我在流代码之外创建了一个队列,然后我将当前元素排入队列。当我的队列有两个元素时,我将它出列并使用第一个元素。
我面临的问题是我无法将队列排入队列,因为它在我的流代码之外声明。我想这是因为流使用多个JVM,我的队列将在一个JVM中声明。
以下是示例代码:
val queue = Queue[Array[Double]]() //Global Queue
val ws = dataStream.map(row => {
queue.enqueue(row)
println(queue.size) //Prints 0 always
if(queue.size == 2){
result = operate(queue(0))
queue.dequeue
}
result
})
此处,没有任何内容被排队,队列的大小始终为0。 有没有办法在Flink中创建全局变量,这些变量分布在所有JVM中?如果没有,有没有其他方法来实现这个逻辑?
答案 0 :(得分:0)
令人惊讶的是,当我用Scala Queue
替换List
时,它起了作用。