K
- the type of the keys of the KVs being transcodedV
- the type of the values of the KVs being transcodedpublic class KvCoder<K,V> extends StructuredCoder<KV<K,V>>
KvCoder
encodes KV
s.Coder.Context, Coder.NonDeterministicException
Modifier and Type | Method and Description |
---|---|
boolean |
consistentWithEquals()
|
KV<K,V> |
decode(java.io.InputStream inStream)
Decodes a value of type
T from the given input stream in
the given context. |
KV<K,V> |
decode(java.io.InputStream inStream,
Coder.Context context)
Decodes a value of type
T from the given input stream in
the given context. |
void |
encode(KV<K,V> kv,
java.io.OutputStream outStream)
Encodes the given value of type
T onto the given output stream. |
void |
encode(KV<K,V> kv,
java.io.OutputStream outStream,
Coder.Context context)
Encodes the given value of type
T onto the given output stream
in the given context. |
java.util.List<? extends Coder<?>> |
getCoderArguments()
|
TypeDescriptor<KV<K,V>> |
getEncodedTypeDescriptor()
Returns the
TypeDescriptor for the type encoded. |
Coder<K> |
getKeyCoder() |
Coder<V> |
getValueCoder() |
boolean |
isRegisterByteSizeObserverCheap(KV<K,V> kv)
Returns whether both keyCoder and valueCoder are considered not expensive.
|
static <K,V> KvCoder<K,V> |
of(Coder<K> keyCoder,
Coder<V> valueCoder) |
void |
registerByteSizeObserver(KV<K,V> kv,
org.apache.beam.sdk.util.common.ElementByteSizeObserver observer)
Notifies ElementByteSizeObserver about the byte size of the
encoded value using this coder.
|
java.lang.Object |
structuralValue(KV<K,V> kv)
Returns an object with an
Object.equals() method that represents structural equality on
the argument. |
void |
verifyDeterministic()
Throw
Coder.NonDeterministicException if the coding is not deterministic. |
equals, getComponents, hashCode, toString
getEncodedElementByteSize, verifyDeterministic, verifyDeterministic
public void encode(KV<K,V> kv, java.io.OutputStream outStream) throws java.io.IOException, CoderException
Coder
T
onto the given output stream.public void encode(KV<K,V> kv, java.io.OutputStream outStream, Coder.Context context) throws java.io.IOException, CoderException
Coder
T
onto the given output stream
in the given context.public KV<K,V> decode(java.io.InputStream inStream) throws java.io.IOException, CoderException
Coder
T
from the given input stream in
the given context. Returns the decoded value.public KV<K,V> decode(java.io.InputStream inStream, Coder.Context context) throws java.io.IOException, CoderException
Coder
T
from the given input stream in
the given context. Returns the decoded value.public java.util.List<? extends Coder<?>> getCoderArguments()
Coder
Coder
for a parameterized type, returns the
list of Coder
s being used for each of the parameters in the same order they appear
within the parameterized type's type signature. If this cannot be done, or this
Coder
does not encode/decode a parameterized type, returns the empty list.getCoderArguments
in class Coder<KV<K,V>>
public void verifyDeterministic() throws Coder.NonDeterministicException
Coder
Coder.NonDeterministicException
if the coding is not deterministic.
In order for a Coder
to be considered deterministic,
the following must be true:
Object.equals()
or Comparable.compareTo()
, if supported) have the same
encoding.
Coder
always produces a canonical encoding, which is the
same for an instance of an object even if produced on different
computers at different times.
verifyDeterministic
in class Coder<KV<K,V>>
Coder.NonDeterministicException
- if this coder is not deterministic.public boolean consistentWithEquals()
StructuredCoder
true
if this Coder
is injective with respect to Object.equals(java.lang.Object)
.
Whenever the encoded bytes of two values are equal, then the original values are equal
according to Objects.equals()
. Note that this is well-defined for null
.
This condition is most notably false for arrays. More generally, this condition is false
whenever equals()
compares object identity, rather than performing a
semantic/structural comparison.
By default, returns false.
consistentWithEquals
in class StructuredCoder<KV<K,V>>
false
for StructuredCoder
unless overridden.public java.lang.Object structuralValue(KV<K,V> kv)
Coder
Object.equals()
method that represents structural equality on
the argument.
For any two values x
and y
of type T
, if their encoded bytes are the
same, then it must be the case that structuralValue(x).equals(@code structuralValue(y)
.
Most notably:
null
should be a proper object with an
equals()
method, even if the input value is null
.
See also Coder.consistentWithEquals()
.
By default, if this coder is Coder.consistentWithEquals()
, and the value is not null,
returns the provided object. Otherwise, encodes the value into a byte[]
, and returns
an object that performs array equality on the encoded bytes.
structuralValue
in class StructuredCoder<KV<K,V>>
public boolean isRegisterByteSizeObserverCheap(KV<K,V> kv)
isRegisterByteSizeObserverCheap
in class Coder<KV<K,V>>
public void registerByteSizeObserver(KV<K,V> kv, org.apache.beam.sdk.util.common.ElementByteSizeObserver observer) throws java.lang.Exception
registerByteSizeObserver
in class Coder<KV<K,V>>
java.lang.Exception
public TypeDescriptor<KV<K,V>> getEncodedTypeDescriptor()
Coder
TypeDescriptor
for the type encoded.getEncodedTypeDescriptor
in class StructuredCoder<KV<K,V>>