Spark Streaming:如何将输出反馈到输入中

时间:2016-03-02 01:21:28

标签: apache-spark spark-streaming apache-flink flink-streaming

enter image description here
是否可以实施上述方案?
系统从一个键值对开始,将发现新的对。首先,键值对的数量会增加,然后在迭代中缩小。

更新:我必须转向Flink Streaming以获得迭代支持。不过会尝试使用kafka!

1 个答案:

答案 0 :(得分:2)

使用Apache Flink,可以通过iterate API调用定义反馈边缘。 iterate方法需要一个步进函数,在给定输入流的情况下,该函数产生反馈流和输出流。前一个流被反馈到阶梯函数,后一个流被发送到下游操作员。

一个简单的例子如下:

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,则完成随机游走。