@Documented
@Retention(value=RUNTIME)
@Target(value=METHOD)
public static @interface DoFn.ProcessElement
DoFn
must have
a method with this annotation.
The signature of this method must satisfy the following constraints:
DoFn.ProcessContext
.
RestrictionTracker
, then it is a splittable DoFn
subject to the
separate requirements described below. Items below are assuming this is not a splittable
DoFn
.
BoundedWindow
then it will
be passed the window of the current element. When applied by ParDo
the subtype
of BoundedWindow
must match the type of windows on the input PCollection
.
If the window is not accessed a runner may perform additional optimizations.
void
.
A DoFn
is splittable if its DoFn.ProcessElement
method has a parameter
whose type is a subtype of RestrictionTracker
. This is an advanced feature and an
overwhelming majority of users will never need to write a splittable DoFn
.
Not all runners support Splittable DoFn. See the capability matrix.
See the proposal for an overview of the involved concepts (splittable DoFn, restriction, restriction tracker).
If a DoFn
is splittable, the following constraints must be respected:
DoFn.GetInitialRestriction
method.
DoFn.SplitRestriction
method.
DoFn.NewTracker
method returning the same type as the type of
the RestrictionTracker
argument of DoFn.ProcessElement
, which in turn must be a
subtype of RestrictionTracker<R>
where R
is the restriction type returned
by DoFn.GetInitialRestriction
. This method is optional in case the restriction type
returned by DoFn.GetInitialRestriction
implements HasDefaultTracker
.
DoFn.GetRestrictionCoder
method.
DoFn.ProcessElement
method may return a DoFn.ProcessContinuation
to
indicate whether there is more work to be done for the current element.
DoFn.ProcessElement
method must not use any extra context parameters, such as
BoundedWindow
.
DoFn
itself may be annotated with DoFn.BoundedPerElement
or
DoFn.UnboundedPerElement
, but not both at the same time. If it's not annotated with
either of these, it's assumed to be DoFn.BoundedPerElement
if its DoFn.ProcessElement
method returns void
and DoFn.UnboundedPerElement
if it
returns a DoFn.ProcessContinuation
.
A non-splittable DoFn
must not define any of these methods.