public class Accumulable<R,T>
extends Object
implements java.io.Serializable
R
, may be different from the element type being added, T
.
You must define how to add data, and how to merge two of these together. For some data types,
such as a counter, these might be the same operation. In that case, you can use the simpler
Accumulator
. They won't always be the same, though -- e.g., imagine you are
accumulating a set. You will add items to the set, and you will union two sets together.
Constructor and Description |
---|
Accumulable(R initialValue,
AccumulableParam<R,T> param) |
Modifier and Type | Method and Description |
---|---|
void |
add(T term)
Add more data to this accumulator / accumulable
|
long |
id() |
R |
localValue()
Get the current value of this accumulator from within a task.
|
void |
merge(R term)
Merge two accumulable objects together
|
void |
setValue(R newValue)
Set the accumulator's value; only allowed on master
|
String |
toString() |
R |
value()
Access the accumulator's current value; only allowed on master.
|
R |
zero() |
public Accumulable(R initialValue, AccumulableParam<R,T> param)
public long id()
public R zero()
public void add(T term)
term
- the data to addpublic void merge(R term)
Normally, a user will not want to use this version, but will instead call add
.
term
- the other R
that will get merged with thispublic R value()
public R localValue()
This is NOT the global value of the accumulator. To get the global value after a
completed operation on the dataset, call value
.
The typical use of this method is to directly mutate the local value, eg., to add an element to a Set.
public void setValue(R newValue)
public String toString()
toString
in class Object