You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用自定义类作为DataStreamSource类型时Flink作业执行失败求助

使用自定义类作为DataStreamSource类型时Flink作业执行失败求助

兄弟,我仔细看了你的代码和报错堆栈,一下子就找到问题根源啦!

你看报错最底层的核心异常信息:

Caused by: java.lang.NoSuchMethodException: org.example.Ttest2.()

这说明你的自定义Tuple子类Ttest2没有提供无参构造方法。Flink用来序列化Tuple类型的TupleSerializer在反序列化过程中,需要通过无参构造来创建类的实例,而你的Ttest2只定义了带参的构造方法,导致Flink无法实例化对象,最终抛出了实例化异常。

而你用内置Tuple类(比如Tuple2、Tuple3)的时候没问题,是因为这些官方内置的Tuple类本身就自带了public的无参构造方法,完全符合Flink序列化的要求。

解决方法很简单:给Ttest2添加一个无参构造方法

修改后的Ttest2代码如下:

class Ttest2 extends Tuple2<Integer, String> implements Serializable {

    // 添加public的无参构造方法
    public Ttest2() {
        super(); // 调用父类Tuple2的无参构造
    }

    public Ttest2(Integer first, String second) {
        super(first, second);
    }

    @Override
    public String toString() {
        return "QueryInfo{" +
                "queryId=" + f0 +
                ", queryValue=" + f1 +
                '}';
    }
}

另外还要提醒你一个小细节:如果Ttest2是定义在DataStreamJob类内部的内部类,一定要把它改成static内部类,否则它会隐式持有外部类DataStreamJob的引用,序列化时可能会引发其他意想不到的问题哦!

修改完之后再运行你的作业,应该就能正常输出自定义类的内容啦~

备注:内容来源于stack exchange,提问作者rsttt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:09:32