public abstract static class OutputTimeFn.Defaults<W extends BoundedWindow> extends OutputTimeFn<W>
OutputTimeFn where the
output time depends on the input element timestamps and possibly the window.
To complete an implementation, override OutputTimeFn.assignOutputTime(org.joda.time.Instant, W), at a minimum.
By default, combine(org.joda.time.Instant, org.joda.time.Instant) and merge(W, java.lang.Iterable<? extends org.joda.time.Instant>) return the earliest timestamp of their
inputs.
OutputTimeFn.Defaults<W extends BoundedWindow>, OutputTimeFn.DependsOnlyOnWindow<W extends BoundedWindow>| Modifier | Constructor and Description |
|---|---|
protected |
Defaults() |
| Modifier and Type | Method and Description |
|---|---|
Instant |
combine(Instant outputTimestamp,
Instant otherOutputTimestamp)
Combines the given output times, which must be from the same window, into an output time
for a computed value.
|
boolean |
dependsOnlyOnEarliestInputTimestamp()
Returns
true if the result of combination of many output timestamps actually depends
only on the earliest. |
boolean |
dependsOnlyOnWindow()
Returns
true if the result does not depend on what outputs were combined but only
the window they are in. |
boolean |
equals(Object other) |
int |
hashCode() |
Instant |
merge(W resultWindow,
Iterable<? extends Instant> mergingTimestamps)
Merges the given output times, presumed to be combined output times for windows that
are merging, into an output time for the
resultWindow. |
assignOutputTimepublic Instant combine(Instant outputTimestamp, Instant otherOutputTimestamp)
combine must be commutative: combine(a, b).equals(combine(b, a)).combine must be associative:
combine(a, combine(b, c)).equals(combine(combine(a, b), c)).combine in class OutputTimeFn<W extends BoundedWindow>public Instant merge(W resultWindow, Iterable<? extends Instant> mergingTimestamps)
resultWindow.
When windows w1 and w2 merge to become a new window w1plus2,
then OutputTimeFn.merge(W, java.lang.Iterable<? extends org.joda.time.Instant>) must be implemented such that the output time is the same as
if all timestamps were assigned in w1plus2. Formally:
fn.merge(w, fn.assignOutputTime(t1, w1), fn.assignOutputTime(t2, w2))
must be equal to
fn.combine(fn.assignOutputTime(t1, w1plus2), fn.assignOutputTime(t2, w1plus2))
If the assigned time depends only on the window, the correct implementation of
merge() necessarily returns the result of
assignOutputTime(t1, w1plus2)
(which equals assignOutputTime(t2, w1plus2).
Defaults for this case are provided by OutputTimeFn.DependsOnlyOnWindow.
For many other OutputTimeFn implementations, such as taking the earliest or latest
timestamp, this will be the same as combine(). Defaults for this
case are provided by OutputTimeFn.Defaults.
merge in class OutputTimeFn<W extends BoundedWindow>combine(outputTimstamp, otherOutputTimestamp),
by default.public boolean dependsOnlyOnWindow()
true if the result does not depend on what outputs were combined but only
the window they are in. The canonical example is if all timestamps are sure to
be the end of the window.
This may allow optimizations, since it is typically very efficient to retrieve the window and combining output timestamps is not necessary.
If the assigned output time for an implementation depends only on the window, consider
extending OutputTimeFn.DependsOnlyOnWindow, which returns true here and also provides
a framework for easily implementing a correct OutputTimeFn.merge(W, java.lang.Iterable<? extends org.joda.time.Instant>), OutputTimeFn.combine(org.joda.time.Instant, org.joda.time.Instant) and
OutputTimeFn.assignOutputTime(org.joda.time.Instant, W).
dependsOnlyOnWindow in class OutputTimeFn<W extends BoundedWindow>false by default. An OutputTimeFn that is known to depend only on the
window should extend OutputTimeFn.DependsOnlyOnWindow.public boolean dependsOnlyOnEarliestInputTimestamp()
true if the result of combination of many output timestamps actually depends
only on the earliest.
This may allow optimizations when it is very efficient to retrieve the earliest timestamp to be combined.
dependsOnlyOnEarliestInputTimestamp in class OutputTimeFn<W extends BoundedWindow>true by default.public boolean equals(Object other)
equals in class Objecttrue if the two OutputTimeFn instances have the same class, by
default.