flink侧流输出

  • 测流输出的方法建立多个分支
    定义流的标签
    传入处理器函数中
    判断参数,进行分流
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)
      }
    }
  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值