Class RowSerializer
- java.lang.Object
-
- org.apache.flink.api.common.typeutils.TypeSerializer<Row>
-
- org.apache.flink.api.java.typeutils.runtime.RowSerializer
-
- All Implemented Interfaces:
Serializable
@Internal public final class RowSerializer extends TypeSerializer<Row>
Serializer forRow
.It uses the following serialization format:
|bitmask|field|field|....
The bitmask serves as a header that consists ofROW_KIND_OFFSET
bits for encoding theRowKind
and n bits for whether a field is null. For backwards compatibility, those bits can be ignored if serializer runs in legacy mode:bitmask with row kind: |RK RK F1 F2 ... FN| bitmask in legacy mode: |F1 F2 ... FN|
Field names are an optional part of this serializer. They allow to use rows in named-based field mode. However, the support for name-based rows is limited. Usually, name-based mode should not be used in state but only for in-flight data. For now, names are not part of serializer snapshot or equals/hashCode (similar to
RowTypeInfo
).- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
RowSerializer.RowSerializerSnapshot
ATypeSerializerSnapshot
for RowSerializer.
-
Field Summary
Fields Modifier and Type Field Description static int
ROW_KIND_OFFSET
-
Constructor Summary
Constructors Constructor Description RowSerializer(TypeSerializer<?>[] fieldSerializers)
RowSerializer(TypeSerializer<?>[] fieldSerializers, LinkedHashMap<String,Integer> positionByName)
RowSerializer(TypeSerializer<?>[] fieldSerializers, LinkedHashMap<String,Integer> positionByName, boolean supportsRowKind)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
copy(DataInputView source, DataOutputView target)
Copies exactly one record from the source input view to the target output view.Row
copy(Row from)
Creates a deep copy of the given element in a new element.Row
copy(Row from, Row reuse)
Creates a copy from the given element.Row
createInstance()
Creates a new instance of the data type.Row
deserialize(DataInputView source)
De-serializes a record from the given source input view.Row
deserialize(Row reuse, DataInputView source)
De-serializes a record from the given source input view into the given reuse record instance if mutable.TypeSerializer<Row>
duplicate()
Creates a deep copy of this serializer if it is necessary, i.e. if it is stateful.boolean
equals(Object o)
int
getArity()
int
getLength()
Gets the length of the data type, if it is a fix length data type.int
hashCode()
boolean
isImmutableType()
Gets whether the type is an immutable type.void
serialize(Row record, DataOutputView target)
Serializes the given record to the given target output view.TypeSerializerSnapshot<Row>
snapshotConfiguration()
Snapshots the configuration of this TypeSerializer.
-
-
-
Field Detail
-
ROW_KIND_OFFSET
public static final int ROW_KIND_OFFSET
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
RowSerializer
public RowSerializer(TypeSerializer<?>[] fieldSerializers)
-
RowSerializer
public RowSerializer(TypeSerializer<?>[] fieldSerializers, @Nullable LinkedHashMap<String,Integer> positionByName)
-
RowSerializer
public RowSerializer(TypeSerializer<?>[] fieldSerializers, @Nullable LinkedHashMap<String,Integer> positionByName, boolean supportsRowKind)
-
-
Method Detail
-
isImmutableType
public boolean isImmutableType()
Description copied from class:TypeSerializer
Gets whether the type is an immutable type.- Specified by:
isImmutableType
in classTypeSerializer<Row>
- Returns:
- True, if the type is immutable.
-
duplicate
public TypeSerializer<Row> duplicate()
Description copied from class:TypeSerializer
Creates a deep copy of this serializer if it is necessary, i.e. if it is stateful. This can return itself if the serializer is not stateful.We need this because Serializers might be used in several threads. Stateless serializers are inherently thread-safe while stateful serializers might not be thread-safe.
- Specified by:
duplicate
in classTypeSerializer<Row>
-
createInstance
public Row createInstance()
Description copied from class:TypeSerializer
Creates a new instance of the data type.- Specified by:
createInstance
in classTypeSerializer<Row>
- Returns:
- A new instance of the data type.
-
copy
public Row copy(Row from)
Description copied from class:TypeSerializer
Creates a deep copy of the given element in a new element.- Specified by:
copy
in classTypeSerializer<Row>
- Parameters:
from
- The element reuse be copied.- Returns:
- A deep copy of the element.
-
copy
public Row copy(Row from, Row reuse)
Description copied from class:TypeSerializer
Creates a copy from the given element. The method makes an attempt to store the copy in the given reuse element, if the type is mutable. This is, however, not guaranteed.- Specified by:
copy
in classTypeSerializer<Row>
- Parameters:
from
- The element to be copied.reuse
- The element to be reused. May or may not be used.- Returns:
- A deep copy of the element.
-
getLength
public int getLength()
Description copied from class:TypeSerializer
Gets the length of the data type, if it is a fix length data type.- Specified by:
getLength
in classTypeSerializer<Row>
- Returns:
- The length of the data type, or
-1
for variable length data types.
-
getArity
public int getArity()
-
serialize
public void serialize(Row record, DataOutputView target) throws IOException
Description copied from class:TypeSerializer
Serializes the given record to the given target output view.- Specified by:
serialize
in classTypeSerializer<Row>
- Parameters:
record
- The record to serialize.target
- The output view to write the serialized data to.- Throws:
IOException
- Thrown, if the serialization encountered an I/O related error. Typically raised by the output view, which may have an underlying I/O channel to which it delegates.
-
deserialize
public Row deserialize(DataInputView source) throws IOException
Description copied from class:TypeSerializer
De-serializes a record from the given source input view.- Specified by:
deserialize
in classTypeSerializer<Row>
- Parameters:
source
- The input view from which to read the data.- Returns:
- The deserialized element.
- Throws:
IOException
- Thrown, if the de-serialization encountered an I/O related error. Typically raised by the input view, which may have an underlying I/O channel from which it reads.
-
deserialize
public Row deserialize(Row reuse, DataInputView source) throws IOException
Description copied from class:TypeSerializer
De-serializes a record from the given source input view into the given reuse record instance if mutable.- Specified by:
deserialize
in classTypeSerializer<Row>
- Parameters:
reuse
- The record instance into which to de-serialize the data.source
- The input view from which to read the data.- Returns:
- The deserialized element.
- Throws:
IOException
- Thrown, if the de-serialization encountered an I/O related error. Typically raised by the input view, which may have an underlying I/O channel from which it reads.
-
copy
public void copy(DataInputView source, DataOutputView target) throws IOException
Description copied from class:TypeSerializer
Copies exactly one record from the source input view to the target output view. Whether this operation works on binary data or partially de-serializes the record to determine its length (such as for records of variable length) is up to the implementer. Binary copies are typically faster. A copy of a record containing two integer numbers (8 bytes total) is most efficiently implemented astarget.write(source, 8);
.- Specified by:
copy
in classTypeSerializer<Row>
- Parameters:
source
- The input view from which to read the record.target
- The target output view to which to write the record.- Throws:
IOException
- Thrown if any of the two views raises an exception.
-
equals
public boolean equals(Object o)
- Specified by:
equals
in classTypeSerializer<Row>
-
hashCode
public int hashCode()
- Specified by:
hashCode
in classTypeSerializer<Row>
-
snapshotConfiguration
public TypeSerializerSnapshot<Row> snapshotConfiguration()
Description copied from class:TypeSerializer
Snapshots the configuration of this TypeSerializer. This method is only relevant if the serializer is used to state stored in checkpoints/savepoints.The snapshot of the TypeSerializer is supposed to contain all information that affects the serialization format of the serializer. The snapshot serves two purposes: First, to reproduce the serializer when the checkpoint/savepoint is restored, and second, to check whether the serialization format is compatible with the serializer used in the restored program.
IMPORTANT: TypeSerializerSnapshots changed after Flink 1.6. Serializers implemented against Flink versions up to 1.6 should still work, but adjust to new model to enable state evolution and be future-proof. See the class-level comments, section "Upgrading TypeSerializers to the new TypeSerializerSnapshot model" for details.
- Specified by:
snapshotConfiguration
in classTypeSerializer<Row>
- Returns:
- snapshot of the serializer's current configuration (cannot be
null
). - See Also:
TypeSerializerSnapshot.resolveSchemaCompatibility(TypeSerializerSnapshot)
-
-