大数据学习之Flink(四)

数据源读入数据之后,我们就可以使用各种转换算子,讲一个或者多个DataStream转换成为新的DataStream(一个Flink程序的核心就是所有的转换操作,他们决定了处理的业务逻辑)

  

基本的转换算子:map、filter、flatMap等

聚合算子:keyBy

简单聚合:

  sum():在输入流上,对指定的字段做叠加求和的操作

  min():在输入流上,对指定的字段求最小值。

  max():在输入流上,对指定的字段求最大值

  minBy():与 min()类似,在输入流上针对指定字段求最小值。不同的是,min()只计算指定字段的最小值,其他字段会保留最初第一个数据的值;而 minBy()则会返回包含字段最小值的整条数据

  maxBy():与 max()类似,在输入流上针对指定字段求最大值。两者区别与min()/minBy()完全一致。

归约聚合:reduce

object TransFormTestClass {

  def main(args: Array[String]): Unit = {

    /**
     * 构建Flink环境
     */

    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(2)

    env.setRuntimeMode(RuntimeExecutionMode.BATCH)

    //读取文件 构建有界流
    val stuDS: DataStream[String] = env.readTextFile("FlinkProject/data/students.txt")

    //统计每个班男生的数量
    /**
     * filter
     * 过滤男生
     */
    stuDS.filter(stu=>"男".equals(stu.split(",")(3)))
      .map(stu=>(stu.split(",")(4),1))
      .keyBy(kv=>kv._1)
//      .sum(1)
      //使用reduce手动进行聚合
      .reduce((kv1,kv2)=>{
        (kv1._1,kv1._2+kv2._2)
      })
      .print()


    env.execute()
  }

}
object TransFormWindowClass {
  def main(args: Array[String]): Unit = {

    /**
     * 构建Flink环境
     */
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(2)

    env.setRuntimeMode(RuntimeExecutionMode.BATCH)

    //构建socket数据源
    val lineDS: DataStream[String] = env.socketTextStream("master", 8888)

    //统计最近10秒中单词的数量

    lineDS
      .flatMap(_.split(","))
      .map(word=>(word,1))
      .keyBy(kv=>kv._1)

      /**
       * 基于处理时间的滚动窗口
       */
      .window(TumblingProcessingTimeWindows.of(Time.seconds(10)))
      .sum(1)
      .print()

    //启动Flink
    env.execute()
  }
}

 

posted @   先生小凯  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示