1

enter image description here
是否可以实现上面显示的场景?
系统从一个键值对开始,并发现新的对。首先,键值对的数量会增加,然后在迭代中缩小。Spark Streaming:如何将输出反馈到输入

更新:我必须转向Flink Streaming进行迭代支持。尽管与卡夫卡尝试!

+0

如果这是关于Spark,你为什么使用Hadoop和Flink标签? – zero323

+0

删除了Hadoop。 Flink,因为如果flink有可能,我会很有兴趣知道。我可能会改变这个框架。 –

回答

2

使用Apache Flink,可以通过iterate API调用定义反馈边缘。 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,则随机漫步结束。

+1

我转移到Flink! Flink流式似乎比Spark更好! –

相关问题