- 测流输出的方法建立多个分支
定义流的标签
传入处理器函数中
判断参数,进行分流
package com.uu.two
import java.sql
import java.sql.DriverManager
import com.uu.two.utils.DateTrans
import org.apache.flink.api.common.functions.{MapFunction, RichMapFunction}
import org.apache.flink.api.common.state.ValueStateDescriptor
import org.apache.flink.configuration.Configuration
import org.apache.flink.streaming.api.functions.{KeyedProcessFunction, ProcessFunction}
import org.apache.flink.streaming.api.scala.{OutputTag, StreamExecutionEnvironment}
import org.apache.flink.util.Collector
case class Humman(id:Long,name:String,sex:String)
object FuncOne {
def main(args: Array[String]): Unit = {
val see = StreamExecutionEnvironment.getExecutionEnvironment
see.setParallelism(1)
import org.apache.flink.api.scala._
val value = see.socketTextStream("152.136.136.15", 9999)
val phoneMap = value.map(x => {
val arrayPhone = x.split(" ")
new Humman(arrayPhone(0).trim.toLong, arrayPhone(1), arrayPhone(2))
})
val notSuccessTag= new OutputTag[Humman]("not_success")
val suTag = new OutputTag[Humman]("su")
val splitRiver = phoneMap
.process(new CreateSideStream(notSuccessTag,suTag))
val fuRiver = splitRiver.getSideOutput(notSuccessTag)
val suTagInfo = splitRiver.getSideOutput(suTag)
splitRiver.print("main")
fuRiver.print("fu")
suTagInfo.print("suTag")
see.execute("FuncOne")
}
class CreateSideStream(tag: OutputTag[Humman],tag2:OutputTag[Humman]) extends ProcessFunction[Humman,Humman]{
override def processElement(value: Humman, ctx: ProcessFunction[Humman, Humman]#Context, out: Collector[Humman]): Unit = {
if (value.sex.equals("women")){
out.collect(value)
}else if (value.sex.equals("man")){
ctx.output(tag,value)
}else{
ctx.output(tag2,value)
}
}
}
}