【Flink】RuntimeException: Row arity of from does not match serializers

1.美图

在这里插入图片描述

2.背景

ControlEvent继承Row,想跟着flink的算子往下传递,结果报错


import org.apache.flink.types.Row;

public class  ControlEvent extends Row {
    private String id;
    private String name;

    public ControlEvent() {
        super(1);
    }

    public ControlEvent(String id, String name) {
        // 1
        super(1);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

报错如下

java.lang.RuntimeException: Row arity of from does not match serializers.
  at org.apache.flink.api.java.typeutils.runtime.RowSerializer.copy(RowSerializer.java:86)
  at org.apache.flink.api.java.typeutils.runtime.RowSerializer.copy(RowSerializer.java:44)
  at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator(OperatorChain.java:635)
  at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:612)
  at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:592)
  at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:727)
  at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:705)
  at org.apache.flink.streaming.api.operators.TimestampedCollector.collect(TimestampedCollector.java:51)
  at com.dbapp.baas.engine.common.etl.filterlabel.FilterLabel.processElement2(FilterLabel.java:241)
  at com.dbapp.baas.engine.common.etl.filterlabel.FilterLabel.processElement2(FilterLabel.java:29)
  at org.apache.flink.streaming.api.operators.co.CoProcessOperator.processElement2(CoProcessOperator.java:77)
  at org.apache.flink.streaming.runtime.io.StreamTwoInputProcessor.processInput(StreamTwoInputProcessor.java:286)
  at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:279)
  at org.apache.flink.streaming.runtime.tasks.StreamTask.run(StreamTask.java:301)
  at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:406)
  at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:705)
  at org.apache.flink.runtime.taskmanager.Task.run(Task.java:530)
  at java.lang.Thread.run(Thread.java:745)

测试类参考:org.apache.flink.streaming.examples.rowserializer.RowSerializerDemoTest#testRowSerializer1

	@Test
    public void testRowSerializer1() {
        TypeInformation<Row> typeInfo = new RowTypeInfo(
                BasicTypeInfo.INT_TYPE_INFO,
                BasicTypeInfo.STRING_TYPE_INFO);
        Row row1 = new Row(2);
        row1.setField(0, 1);
        row1.setField(1, "a");

        ControlEvent controlEvent = new  ControlEvent();
        controlEvent.setId("1");
        controlEvent.setName("lcc");
        Row row2 = Row.of(controlEvent);

        TypeSerializer<Row> serializer = typeInfo.createSerializer(new ExecutionConfig());
        RowSerializerTestInstance instance = new RowSerializerTestInstance(serializer, row1, row2);
        instance.testAll();
    }
发布了1264 篇原创文章 · 获赞 465 · 访问量 161万+

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/105647242