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,绿色虚线代表实现一个接口,绿色实线代表继承一个类,蓝色实线代表继承一个抽象类。

 

posted @ 2024-05-21 12:40  人不疯狂枉一生  阅读(62)  评论(0编辑  收藏  举报