code: public ReduceOperator<T> reduce(ReduceFunction<T> reducer) {
  		if (reducer == null) {
  			throw new NullPointerException("Reduce function must not be null.");
  		}
  		return new ReduceOperator<>(this, clean(reducer), Utils.getCallLocationName());
  	}
docs: Applies a Reduce transformation on a non-grouped {@link DataSet}.
  
  <p>The transformation consecutively calls a {@link org.apache.flink.api.common.functions.RichReduceFunction}
  until only a single element remains which is the result of the transformation.
  A ReduceFunction combines two elements into one new element of the same type.
  
  @param reducer The ReduceFunction that is applied on the DataSet.
  @return A ReduceOperator that represents the reduced DataSet.
  
  @see org.apache.flink.api.common.functions.RichReduceFunction
  @see ReduceOperator
  @see DataSet