Flink富函数无法序列化的解决方法(仅供参考)

在Flink中的RichXXXFunction在demo中可能不会类似的错误,但是在项目的整体开发过程中或者二次开发中就有可能遇到“is not serializable ”

首先要知道什么是序列化,有啥用处:
序列化就是将对象的信息状态转为可存储/传输的形式,在序列化的时候就将信息传入到临时/持久存储中进行保存,下次读取的时候直接从存储区读取。

最终的目的是为了对象可以跨平台存储,和进行网络传输。

知道序列化之后,回到之前的问题,就是在flink中的上下文传输的时候,有些变量在传输的时候丢失了,所以在多次百度百科之后尝试用过方法:

  1. 匿名内部类直接new RichXXXFunction 并在其中用的都是已经实现serializable 的成员方法,但是效果不够明显还是会报错“is not serializable ”。

  2. 在类中自定义类继承富函数,实现serializable ,但是还是无法做到,错误依然存在,不过有一个特殊的情况就是定义的时候用static(不可序列化)来描述自定义类的话是可以解决问题的,但是适用的场景比较少,因为静态类在运行的时候是先加载的,所以要注意适用场景。

  3. 在一个新的类中自定义类去继承富函数,实现serializable,定义构造器(根据业务来定义),最终可以解决错误“is not serializable ”。

注意在自定义的类中的成员变量也要是实现了serializable的,实现serializable也可以用简单的方式,只需要直接:implements Serializable 然后private static final long serialVersionUID = 1L;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值