package org.example
import org.apache.flink.streaming.api.scala._
import scala.collection.mutable.ArrayBuffer
object MyRandom {
def main(args: Array[String]): Unit = {
//创建执行环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
//设置线程数为1
env.setParallelism(1)
//设置数据源为1到100的集合
val arr = ArrayBuffer[Int]()
for(i <- 1 to 100){
arr.append(i)
}
val ds = env.fromCollection(arr)
//把数据源按指定规则split为奇数流和偶数流
val res = ds.split(num => {
if (num % 2 == 0) Seq("even")
else Seq("odd")
})
val even = res.select("even")
val odd = res.select("odd")
//打印输出奇数流和偶数流
even.print("even")
odd.print("odd")
//执行环境触发执行
env.execute()
}
}
执行结果如图显示:
上述的split方法上面有一条横线,显示即将过期,要用process方法来替代:
package org.example
import org.apache.flink.streaming.api.functions.ProcessFunction
import org.apache.flink.streaming.api.scala._
import org.apache.flink.util.Collector
import scala.collection.mutable.ArrayBuffer
object MyRandom {
def main(args: Array[String]): Unit = {
//创建执行环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
//设置线程数
env.setParallelism(8)
//设置数据源为1到100的集合
val arr = ArrayBuffer[Int]()
for(i <- 1 to 100){
arr.append(i)
}
val ds = env.fromCollection(arr)
//用process方法实现分流
val res = ds.process(new EO())
val odd = res.getSideOutput(new OutputTag[String]("otest"))
val even = res.getSideOutput(new OutputTag[String]("etest"))
even.print()
odd.print()
env.execute()
}
}
class EO()extends ProcessFunction[Int,Int]{
lazy val otag = new OutputTag[String]("otest")
lazy val etag = new OutputTag[String]("etest")
//重写processElement方法指定分流规则
override def processElement(i: Int, context: ProcessFunction[Int, Int]#Context, collector: Collector[Int]): Unit = {
if (i%2==0) context.output(etag,"even"+i)
else context.output(otag,"odd"+i)
}
}