1.迭代流定义
直接看官网的解释:
迭代流程序实现了一个阶段函数,并将其嵌入到IterativeStream中。由于DataStream程序可能永远不会完成,因此没有最大迭代次数。相反,您需要指定使用分割转换或过滤器将流的哪一部分反馈回iteration,以及哪一部分转发到下游。这里,我们展示了一个示例迭代,其中主体(重复的计算部分)是一个简单的映射转换,反馈的元素由使用过滤器转发到下游的元素来区分。
2.scala代码示例
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
import org.apache.flink.api.scala._
import org.apache.flink.ml.math.DenseVector
/**
* @Author: ch
* @Date: 25/05/2020 2:55 PM
* @Version 1.0
* @Describe:
*/
object DataStreamIterateTest {
/**
* 测试迭代流
* @param args
*/
def main(args: Array[String]): Unit = {
// the port to connect to
var port = 0
try {
ParameterTool.fromArgs(args).getInt("port")
} catch {
case e: Exception => {
port = 9000
}
}
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
val socketText: DataStream[String] = env.socketTextStream("127.0.0.1", port, '\n')
val iterate = socketText
.iterate( //stepfunction: initialStream => (feedback, output)
iteration =>{
val feedback: DataStream[String] = iteration.filter(s=>s=="haha").setParallelism(1)
feedback.print()
val output: DataStream[String] = iteration.filter(s=>s!="haha")
(feedback,output)
}
)
.print()
env.execute()
}
}
3.运行socket进行测试,输入"hehe" "haha",其中"hehe"输出到output流中,“haha”输出到feedback流中并不断迭代。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。