Spark Streaming:如何将输出反馈为输入
Spark Streaming: How to feedback output into input
是否可以实现上面显示的场景?
系统从一个键值对开始,然后会发现新的键值对。首先键值对的数量会增加,然后在迭代中减少。
更新:我必须转向 Flink Streaming 以获得迭代支持。不过会尝试使用 kafka!
使用 Apache Flink 可以通过 iterate
API 调用定义反馈边。 iterate
方法需要一个阶跃函数,给定一个输入流,该函数会产生一个反馈流和一个输出流。前一个流反馈给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
.
时,随机游走结束
是否可以实现上面显示的场景?
系统从一个键值对开始,然后会发现新的键值对。首先键值对的数量会增加,然后在迭代中减少。
更新:我必须转向 Flink Streaming 以获得迭代支持。不过会尝试使用 kafka!
使用 Apache Flink 可以通过 iterate
API 调用定义反馈边。 iterate
方法需要一个阶跃函数,给定一个输入流,该函数会产生一个反馈流和一个输出流。前一个流反馈给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
.