Flink: Function And Rich Function

本文介绍了Apache Flink中自定义算子的概念,包括Function和RichFunction的区别。Function是最基本的实现,而RichFunction提供了更多的生命周期方法,如open和close,便于进行更复杂的初始化和资源清理。通过自定义这些算子,可以灵活地处理业务数据并将其Sink到目标存储。文章以MapFunction为例,展示了如何实现自定义的MapFunction和RichMapFunction,并强调了算子的并行度和生命周期管理的重要性。

序言

       了解了Flink提供的算子,那我们就可以自定义算子了.自定义算子的目的是为了更加灵活的处理我们的业务数据,并将满足条件的结果Sink到目标存储地cuiyaonan2000@163.com

       Function有2中类型即 Function  Rich Function .从字面意思我们可以了解 Rich Function 肯定是比Function提供了更多的功能的.

参考版本为: v1.13.2

官网地址:用户自定义 Functions | Apache Flink

Function

以算子Map举例 我们自定义的Function需要实现类(针对其它算子比如Filter,则是实现接口FilterFunction)

MapFunction<?, ?>

举例实现类

class MyMapFunction implements MapFunction<String, Integer> {
  public Integer map(String value) { return Integer.parseInt(value); }
};
data.map(new MyMapFunction());

Rich Functions

Rich functions 对比 Function 还提供了这些方法:openclosegetRuntimeContext 和 setRuntimeContext

由上可见一个RichFunctions的调用绝非是一次性买卖,提供了一个生命周期的管理,即从open开始到close结束.同时提供了getRuntimeContext 以获取Flink的上下文环境.

需要注意的是Flink 流数据处理_难得糊涂-优快云博客_flink数据处理范式 里已经很清楚地表明了,算子是针对窗口的计算执行者,且算子有并行度,则每个算子的生命周期是相互独立的.这个很好理解因为算子的有并行度,且相同算子的可能有多个线程,且分布在不同的服务器上.cuiyaonan2000@163.com.  

  1. open()方法: 是rich function的初始化方法,当一个算子例如map或者filter被调用之前open()会被调用。
  2. close()方法: 是生命周期中的最后一个调用的方法,做一些清理工作。
  3. getRuntimeContext()方法: 提供了函数的RuntimeContext的一些信息,例如函数执行的并行度,任务的名字,以及state状态

同理针对Map算子,创建我们自己的自定义算子需要实现接口RichMapFunction

class MyMapFunction extends RichMapFunction<String, Integer> {
  public Integer map(String value) { return Integer.parseInt(value); }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiyaonan2000

给包烟抽吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值