Split 和 select [DataStream->SplitStream->DataStream]
Split 算子是将一个 DataStream 数据集按照条件进行拆分,形成两个数据集的过程, 也是 union 算子的逆向实现。每个接入的数据都会被路由到一个或者多个输出数据集中。如 下图所示,将输入数据集根据颜色切分成两个数据集。
Flink常用API之转换算子的Split算子_big data
在使用 split 函数中,需要定义 split 函数中的切分逻辑,通过调用 split 函数,然后 指定条件判断函数,

package transformation

import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import source.{MyCustomerSource, StationLog}

/**
* @Author yqq
* @Date 2021/12/26 16:51
* @Version 1.0
*/
object Transformation02 {
def main(args: Array[String]): Unit = {
val en = StreamExecutionEnvironment.getExecutionEnvironment
en.setParallelism(1)

import org.apache.flink.streaming.api.scala._
//读取数据源
val stream = en.addSource(new MyCustomerSource)
val result: SplitStream[StationLog] = stream.split(//流并没有真被切割开
log => {
if (log.callType.equals("success")) Seq("success") else Seq("no success") //给两个不同数据打上标签
}
)
val stream1: DataStream[StationLog] = result.select("success")
val stream2: DataStream[StationLog] = result.select("no success")
stream1.print("通话成功")
stream2.print("通话不成功")
en.execute()
}
}

Flink常用API之转换算子的Split算子_flink_02
split 函数本身只是对输入数据集进行标记,并没有将数据集真正的实现切分,因此需 要借助 Select 函数根据标记将数据切分成不同的数据集。