“富函数”是 DataStream API 提供的一个函数类的接口,所有 Flink 函数类都有其 Rich 版本。

与常规函数的区别

  1. 可以获取运行环境的上下文,并拥有一些生命周期方法,所以可以实现更复杂的功能。

示例

  1. public static class MyMapFunction extends RichMapFunction<SensorReading,
  2. Tuple2<Integer, String>> {
  3. @Override
  4. public Tuple2<Integer, String> map(SensorReading value) throws Exception {
  5. return new Tuple2<>(getRuntimeContext().getIndexOfThisSubtask(),
  6. value.getId());
  7. }
  8. @Override
  9. public void open(Configuration parameters) throws Exception {
  10. System.out.println("my map open");
  11. // 以下可以做一些初始化工作,例如建立一个和 HDFS 的连接
  12. }
  13. @Override
  14. public void close() throws Exception {
  15. System.out.println("my map close");
  16. // 以下做一些清理工作,例如断开和 HDFS 的连接
  17. } }