code: public <K> JoinOperatorSetsPredicateBase where(KeySelector<I1, K> keySelector) {
  		TypeInformation<K> keyType = TypeExtractor.getKeySelectorTypes(keySelector, input1.getType());
  		return new JoinOperatorSetsPredicateBase(new Keys.SelectorFunctionKeys<>(keySelector, input1.getType(), keyType));
  	}
docs: Continues a Join transformation and defines a {@link KeySelector} function for the first join {@link DataSet}.
  
  <p>The KeySelector function is called for each element of the first DataSet and extracts a single
  key value on which the DataSet is joined.
  
  @param keySelector The KeySelector function which extracts the key values from the DataSet on which it is joined.
  @return An incomplete Join transformation.
  Call {@link org.apache.flink.api.java.operators.join.JoinOperatorSetsBase.JoinOperatorSetsPredicateBase#equalTo(int...)} or
  {@link org.apache.flink.api.java.operators.join.JoinOperatorSetsBase.JoinOperatorSetsPredicateBase#equalTo(KeySelector)}
  to continue the Join.
  
  @see KeySelector
  @see DataSet