当前位置:   article > 正文

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

flink not serializable

在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;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/767726
推荐阅读
相关标签
  

闽ICP备14008679号