Lazy loaded image
8-.实现UDF函数——更细粒度的控制流
00 分钟
2024-10-9

函数类(Function Classes)

Flink暴露了所有UDF函数的接口(实现方式为接口或者抽象类)。例如MapFunction, FilterFunction, ProcessFunction等等。
下面例子实现了FilterFunction接口:
还可以将函数实现成匿名类
我们filter的字符串"flink"还可以当作参数传进去。

匿名函数(Lambda Functions)

“富函数”是DataStream API提供的一个函数类的接口,所有Flink函数类都有其Rich版本。
 它与常规函数的不同在于,可以获取运行环境的上下文,并拥有一些生命周期方法,所以可以实现更复杂的功能
  • RichMapFunction
  • RichFlatMapFunction
  • RichFilterFunction
Rich Function有一个生命周期的概念。典型的生命周期方法有:
  • open()方法是rich function的初始化方法,当一个算子例如map或者filter被调用之前open()会被调用。
  • close()方法是生命周期中的最后一个调用的方法,做一些清理工作。
  • getRuntimeContext()方法提供了函数的RuntimeContext的一些信息,例如函数执行的并行度,任务的名字,以及state状态

富函数(Rich Functions)

“富函数”是DataStream API提供的一个函数类的接口,所有Flink函数类都有其Rich版本。
 它与常规函数的不同在于,可以获取运行环境的上下文,并拥有一些生命周期方法,所以可以实现更复杂的功能
  • RichMapFunction
  • RichFlatMapFunction
  • RichFilterFunction
Rich Function有一个生命周期的概念。典型的生命周期方法有:
  • open()方法是rich function的初始化方法,当一个算子例如map或者filter被调用之前open()会被调用。
  • close()方法是生命周期中的最后一个调用的方法,做一些清理工作。
  • getRuntimeContext()方法提供了函数的RuntimeContext的一些信息,例如函数执行的并行度,任务的名字,以及state状态
测试代码:

输出

由于设置了执行环境env的并行度为4,所以有4个slot执行自定义的RichFunction,输出4次open和close
上一篇
flowable获取下一步会创建的用户任务
下一篇
windows docker 启动失败

评论
Loading...