code: public SplitDataProperties<T> splitsGroupedBy(int... groupFields) {
  
  		if (groupFields == null) {
  			throw new InvalidProgramException("GroupFields may not be null.");
  		} else if (groupFields.length == 0) {
  			throw new InvalidProgramException("GroupFields may not be empty.");
  		}
  
  		if (this.splitOrdering != null) {
  			throw new InvalidProgramException("DataSource may either be grouped or sorted.");
  		}
  
  		this.splitGroupKeys = getAllFlatKeys(groupFields);
  
  		return this;
  	}
docs: Defines that the data within an input split is grouped on the fields defined by the field positions.
  All records sharing the same key (combination) must be subsequently emitted by the input
  format for each input split.
  
  <p><b>
  IMPORTANT: Providing wrong information with SplitDataProperties can cause wrong results!
  </b>
  
  @param groupFields The field positions of the grouping keys.
  @return This SplitDataProperties object.