code: public <R> CrossOperator.DefaultCross<T, R> cross(DataSet<R> other) {
  		return new CrossOperator.DefaultCross<>(this, other, CrossHint.OPTIMIZER_CHOOSES, Utils.getCallLocationName());
  	}
docs: Initiates a Cross transformation.
  
  <p>A Cross transformation combines the elements of two
  {@link DataSet DataSets} into one DataSet. It builds all pair combinations of elements of
  both DataSets, i.e., it builds a Cartesian product.
  
  
  <p>The resulting {@link org.apache.flink.api.java.operators.CrossOperator.DefaultCross} wraps each pair of crossed elements into a {@link Tuple2}, with
  the element of the first input being the first field of the tuple and the element of the
  second input being the second field of the tuple.
  
  
  <p>Call {@link org.apache.flink.api.java.operators.CrossOperator.DefaultCross#with(org.apache.flink.api.common.functions.CrossFunction)} to define a
  {@link org.apache.flink.api.common.functions.CrossFunction} which is called for
  each pair of crossed elements. The CrossFunction returns a exactly one element for each pair of input elements.
  
  @param other The other DataSet with which this DataSet is crossed.
  @return A DefaultCross that returns a Tuple2 for each pair of crossed elements.
  
  @see org.apache.flink.api.java.operators.CrossOperator.DefaultCross
  @see org.apache.flink.api.common.functions.CrossFunction
  @see DataSet
  @see Tuple2