实现函数

我们在上面的转换过程中,经常使用函数,这次我们就详细讲解下DataStream API中定义和参数化函数的方式.

Flink中所有用户自定义函数,都是接口或者抽象类的形式对外暴露的.

比如我们实现一个FilterFunction,过滤了所有包含flink一词的字符串

图片

当然一个函数在初始化的时候可以具有属性,比如我们创建一个FilterFunction,并传入一个字符串作为过滤条件

图片

当然由于程序提交执行的时候,所有参数都会利用Java自身的序列化机制进行序列化,并发送到对应算子的并行任务,这样反序列化后,也可以保留配置

如果有无法序列化的对象实例,那么可以使用富函数 rich function进行初始化或者覆盖Java的序列化和反序列化方法.

而且Flink中的函数大抵都是支持Lambda方式书写的,Lambda函数可以使用于Scala和Java,以一种简单的方式说明业务逻辑

最后,Flink提供了富函数,这是一种比正常函数包含更多信息,提供更多功能的函数

DataStream API中所有的转换函数都有对应的富函数,和一般的函数比起来,富函数在前面加上了Rich,比如 RichMapFunction,RichFlatMapFunction

比如使用富函数的时候,具有两个额外的方法.

open()方法,进行初始化,在首次调用任务的时候进行处罚,往往进行一些初始化设置操作.

close()方法,作为终止方法,每个人物最后一次调用的时候调用一次,进行清理和释放资源

而且在其中,还可以利用getRuntimeContext()方法访问函数的RuntimeContext,其中包含了函数的并行度,函数所在子任务的编号,还有任务名称

发表评论

邮箱地址不会被公开。 必填项已用*标注