code: public <K extends Comparable<K>> UnsortedGrouping<T> groupBy(KeySelector<T, K> keyExtractor) {
  		return new UnsortedGrouping<T>(this, new Keys.SelectorFunctionKeys<T, K>(keyExtractor, getType()));
  	}
docs: Groups a {@link DataSet} using a {@link KeySelector} function.
  The KeySelector function is called for each element of the DataSet and extracts a single
  key value on which the DataSet is grouped. </br>
  This method returns an {@link UnsortedGrouping} on which one of the following grouping transformation
  can be applied.
  <ul>
  <li>{@link UnsortedGrouping#sortGroup(int, eu.stratosphere.api.common.operators.Order)} to get a {@link SortedGrouping}.
  <li>{@link Grouping#aggregate(Aggregations, int)} to apply an Aggregate transformation.
  <li>{@link Grouping#reduce(ReduceFunction)} to apply a Reduce transformation.
  <li>{@link Grouping#reduceGroup(GroupReduceFunction)} to apply a GroupReduce transformation.
  </ul>
  
  @param keyExtractor The KeySelector function which extracts the key values from the DataSet on which it is grouped.
  @return An UnsortedGrouping on which a transformation needs to be applied to obtain a transformed DataSet.
  
  @see KeySelector
  @see Grouping
  @see UnsortedGrouping
  @see SortedGrouping
  @see AggregateOperator
  @see ReduceOperator
  @see GroupReduceOperator
  @see DataSet