spark流:如何将输出反馈到输入


0

是否可以实现上述场景?

更新:为了支持迭代,我不得不转向Flink streaming。但我会和 Kafka 一起尝试!

1 答案


0

使用apacheflink,可以通过iterateapi调用定义反馈边。iterate方法需要一个step函数,在给定输入流的情况下,该函数生成反馈流和输出流。前一个流被反馈给step函数,后一个流被发送给下游操作符。

一个简单的例子如下所示:

val env = StreamExecutionEnvironment.getExecutionEnvironment

val input = env.fromElements(1).map(x => (x, math.random))

val output = input.iterate {
inputStream =>
val iterationBody = inputStream.flatMap {
randomWalk =>
val (step, position) = randomWalk
val direction = 2 * (math.random - 0.5)
val bifurcate = math.random >= 0.75

    Seq(
      Some((step + 1, position + direction)),
      if (bifurcate) Some((step + 1, position - direction)) else None).flatten
}

val feedback = iterationBody.filter {
  randomWalk => math.abs(randomWalk._2) < 1.0
}

val output = iterationBody.filter {
  randomWalk => math.abs(randomWalk._2) >= 1.0
}

(feedback, output)

}

output.print()

// execute program
env.execute("Random Walk with Bifurcation")

在这里,我们计算一个随机游动,在这里,我们随机分割我们的游动,向相反的方向前进。当一个随机游动的绝对位置值大于或等于1.0时,它就结束了。


我来回答

写文章

提问题

面试题