赞
踩
在Flink中的RichXXXFunction在demo中可能不会类似的错误,但是在项目的整体开发过程中或者二次开发中就有可能遇到“is not serializable ”
首先要知道什么是序列化,有啥用处:
序列化就是将对象的信息状态转为可存储/传输的形式,在序列化的时候就将信息传入到临时/持久存储中进行保存,下次读取的时候直接从存储区读取。
最终的目的是为了对象可以跨平台存储,和进行网络传输。
知道序列化之后,回到之前的问题,就是在flink中的上下文传输的时候,有些变量在传输的时候丢失了,所以在多次百度百科之后尝试用过方法:
匿名内部类直接new RichXXXFunction 并在其中用的都是已经实现serializable 的成员方法,但是效果不够明显还是会报错“is not serializable ”。
在类中自定义类继承富函数,实现serializable ,但是还是无法做到,错误依然存在,不过有一个特殊的情况就是定义的时候用static(不可序列化)来描述自定义类的话是可以解决问题的,但是适用的场景比较少,因为静态类在运行的时候是先加载的,所以要注意适用场景。
在一个新的类中自定义类去继承富函数,实现serializable,定义构造器(根据业务来定义),最终可以解决错误“is not serializable ”。
注意在自定义的类中的成员变量也要是实现了serializable的,实现serializable也可以用简单的方式,只需要直接:
implements Serializable 然后private static final long serialVersionUID = 1L;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。