flink调用toRetractStream方法发生各种java.lang.ClassCastException问题解决方法
2021/10/13 17:16:33
本文主要是介绍flink调用toRetractStream方法发生各种java.lang.ClassCastException问题解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景:
本菜鸟在造了一个extends了RichSinkFunction<ItemCountSum2>的mysqlsink class,想把Table中数据转换成指定对象的流,再sink入mysql当中,又遇到一个当时难整的bug。
出现问题:
经排除,问题出现在这段代码块中
解决思路:
检查代码中是否有转换问题出错,然而并没有,继续尝试缩短错误范围,
发现并不是flatMap算子的问题,而是toRetractStream方法调用已经出现问题了。但是这个语句里面并没有显式的类型转换,那么我们就可以大概知道错误出在把table结果转换成流时,数据类型和给定的class里的数据类型出现了冲突。
解决方案:
1.可以尝试严格限制给定class的数据类型和table的类型保持一致。(=。=代码量大时有点麻烦,不建议)
2.先把表格数据转换成Row.class类的数据流,再从每一个Row中提取出所需要的数据,必要时对数据进行转换,再“输入”到自己定义的指定类中。(本人使用)
方便的是Row.class里Filed已经自动给您划分好,你直接用此方法就可以提取出想得到的字段的数据:
总的流程就是:
table ===> DataStream<Tuple2<Boolean,ItemCountSum2>>
===>DataStreamSink<ItemCountSum2>
table ===> DataStream<Tuple2<Boolean,Row>>
===> DataStreamSink<ItemCountSum2>
这篇关于flink调用toRetractStream方法发生各种java.lang.ClassCastException问题解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南