栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

flink调用toRetractStream方法发生各种java.lang.ClassCastException问题解决方法

flink调用toRetractStream方法发生各种java.lang.ClassCastException问题解决方法

背景:

        本菜鸟在造了一个extends了RichSinkFunction的mysqlsink class,想把Table中数据转换成指定对象的流,再sink入mysql当中,又遇到一个当时难整的bug。

出现问题:

        经排除,问题出现在这段代码块中

 

解决思路:

        检查代码中是否有转换问题出错,然而并没有,继续尝试缩短错误范围,

        发现并不是flatMap算子的问题,而是toRetractStream方法调用已经出现问题了。但是这个语句里面并没有显式的类型转换,那么我们就可以大概知道错误出在把table结果转换成流时,数据类型和给定的class里的数据类型出现了冲突。

解决方案:

        1.可以尝试严格限制给定class的数据类型和table的类型保持一致。(=。=代码量大时有点麻烦,不建议)

        2.先把表格数据转换成Row.class类的数据流,再从每一个Row中提取出所需要的数据,必要时对数据进行转换,再“输入”到自己定义的指定类中。(本人使用)

        方便的是Row.class里Filed已经自动给您划分好,你直接用此方法就可以提取出想得到的字段的数据:

 

总的流程就是:

table ===>   DataStream>

                ===>DataStreamSink

table ===>   DataStream

                ===>  DataStreamSink

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号