Flink富函数
富函数是DataStream API提供的函数接口,Flink的函数都有它的Rich版本,它与其他函数不同的是,富函数可以获取到运行环境上下文,初始化参数,拥有生命周期方法等,可通过它进行自定义复杂功能。我们常见的如RichMapFunction、RichFilterFunction等。
富函数的生命周期主要通过重写三个方法来实现。
(1)提供open()方法,它是 rich function 的初始化方法,当一个算子例如 map 或者 filter被调用之前 open()会被调用。
(2)close()方法是生命周期中的最后一个调用的方法,做一些清理工作。
(3)getRuntimeContext()方法提供了函数的 RuntimeContext 的一些信息,例如函数执行的并行度,任务的名字,以及 state 状态。
具体java代码使用可参考:
public class MyRichMapFunction extends RichMapFunction<Tuple2<String, Integer>, Tuple2<String, Integer>> {
// 可以在 open 方法中初始化资源
@Override
public void open(Configuration config) throws Exception {
super.open(config);
// 初始化代码,例如从配置中读取参数,或者打开文件等
System.out.println("Initializing MyRichMapFunctionWithOpenClose");
}
// map 方法用于定义转换逻辑
@Override
public Tuple2<String, Integer> map(Tuple2<String, Integer> value) throws Exception {
// 转换逻辑
return new Tuple2<>(value.f0, value.f1 * 2); // 示例:将整数部分翻倍
}
// 可以在 close 方法中清理资源
@Override
public void close() throws Exception {
// 清理代码,例如关闭文件,释放资源等
System.out.println("Cleaning up MyRichMapFunctionWithOpenClose");
super.close();
}
}
根据编写的代码查看类关系图如图1,绿色虚线代表实现一个接口,绿色实线代表继承一个类,蓝色实线代表继承一个抽象类。



浙公网安备 33010602011771号