Flink学习笔记(六):flink的算子与富函数

一:Flink中的的Transformation算子
flink常用算子就不自己详细记录了,看这里就够了。

二:富函数
在调用DataStream的算子例如map、filter时,可以传入一个函数,也可以传入一个Function类,就像这样:

val filterStream = stream.filter(new FilterFunction[String] {
     
      override def filter(t: String):Boolean = {
     
        t.equals("a")
      }
    })

其实每个算子的Function类都对应了一个Rich版本,这就是富函数。它与常规函数的不同在于:可以获取运行环境上下文,并拥有一些生命周期方法,以实现更复杂的功能。示例如下:

class MyMapFunction extends RichMapFunction[String,String] {
      
  //这里的泛型表示map操作的输入输出类型

  //open方法是richFunction的初始化方法,当一个算子例如map、filter调用之前这个方法会被调用
  //这里可以做一些初始化工作,例如建立一个与hdfs的连接
  override def open(parameters: Configuration): Unit = {
     
    //getRuntimeContext方法提供了函数的运行时上下文信息,例如函数的并行度,任务名字,以及state状态
    val param = getRuntimeContext.getNumberOfParallelSubtasks

  }

  override def map(in: String): String = {
     
    //实际逻辑操作在这里完成
    ""
  }

  ///open方法会在算子调用后执行,一般做一些清理工作,例如关闭连接
  override def close(): Unit = {
     

  }
}

这个富函数的使用方法:

val mapStream = stream.map(new MyMapFunction)

你可能感兴趣的:(Flink学习笔记(六):flink的算子与富函数)