Munir Contractor created FLINK-37469:
----------------------------------------
Summary: ClassCastException in
org.apache.flink.table.data.GenericRowData
Key: FLINK-37469
URL: https://issues.apache.org/jira/browse/FLINK-37469
Project: Flink
Issue Type: Bug
Environment: Flink 1.19.2
Reporter: Munir Contractor
In my application, I am reading AVRO data from Kafka using KafkaSource. The
data is deserialized as AVRO `GenericRecord` and eventually sent to a sink that
writes it to Iceberg tables. During execution, I see the following stack trace,
once the sink tries to write the data.
{code:java}
Caused by: java.lang.ClassCastException: class java.lang.Integer cannot be cast
to class java.lang.Long (java.lang.Integer and java.lang.Long are in module
java.base of loader 'bootstrap')
at org.apache.flink.table.data.GenericRowData.getLong(GenericRowData.java:154)
at
org.apache.flink.table.data.RowData.lambda$createFieldGetter$245ca7d1$7(RowData.java:249)
at
org.apache.flink.table.runtime.typeutils.RowDataSerializer.copyRowData(RowDataSerializer.java:170)
at
org.apache.flink.table.runtime.typeutils.RowDataSerializer.copy(RowDataSerializer.java:131)
at
org.apache.flink.table.runtime.typeutils.RowDataSerializer.copy(RowDataSerializer.java:48)
at
org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.pushToOperator(CopyingChainingOutput.java:74)
{code}
Looking through the code for the class, the method does {{return (long)
this.fields[pos]) }}where fields is an array of Object. Because the array has
type Object, the values cannot be directly cast as primitives, but should be
converted to Number, and converted with the appropriate method, i.e. {{return
((Number) this.fields[pos]).longValue();}} Other methods in the class are also
susceptible to this bug.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)