public <K> UnsortedGrouping<T> groupBy(KeySelector<T, K> keyExtractor) {
		TypeInformation<K> keyType = TypeExtractor.getKeySelectorTypes(keyExtractor, getType());
		return new UnsortedGrouping<>(this, new Keys.SelectorFunctionKeys<>(clean(keyExtractor), getType(), keyType));
	}
public < K > UnsortedGrouping < T > groupBy ( KeySelector < T , K > keyExtractor ) { TypeInformation < K > keyType = TypeExtractor . getKeySelectorTypes ( keyExtractor , getType ( ) ) ; return new UnsortedGrouping < > ( this , new Keys . SelectorFunctionKeys < > ( clean ( keyExtractor ) , getType ( ) , keyType ) ) ; }
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.

<p>This method returns an {@link UnsortedGrouping} on which one of the following grouping transformation
can be applied.
<ul>
<li>{@link UnsortedGrouping#sortGroup(int, org.apache.flink.api.common.operators.Order)} to get a {@link SortedGrouping}.
<li>{@link UnsortedGrouping#aggregate(Aggregations, int)} to apply an Aggregate transformation.
<li>{@link UnsortedGrouping#reduce(org.apache.flink.api.common.functions.ReduceFunction)} to apply a Reduce transformation.
<li>{@link UnsortedGrouping#reduceGroup(org.apache.flink.api.common.functions.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 UnsortedGrouping
@see AggregateOperator
@see ReduceOperator
@see org.apache.flink.api.java.operators.GroupReduceOperator
@see DataSet