code: public <T> Graph<K, VV, EV> joinWithEdges(DataSet<Tuple3<K, K, T>> inputDataSet,
  			final EdgeJoinFunction<EV, T> edgeJoinFunction) {
  
  		DataSet<Edge<K, EV>> resultedEdges = this.getEdges()
  				.coGroup(inputDataSet).where(0, 1).equalTo(0, 1)
  				.with(new ApplyCoGroupToEdgeValues<>(edgeJoinFunction))
  					.name("Join with edges");
  		return new Graph<>(this.vertices, resultedEdges, this.context);
  	}
docs: Joins the edge DataSet with an input DataSet on the composite key of both
  source and target IDs and applies a user-defined transformation on the values
  of the matched records. The first two fields of the input DataSet are used as join keys.
  
  @param inputDataSet the DataSet to join with.
  The first two fields of the Tuple3 are used as the composite join key
  and the third field is passed as a parameter to the transformation function.
  @param edgeJoinFunction the transformation function to apply.
  The first parameter is the current edge value and the second parameter is the value
  of the matched Tuple3 from the input DataSet.
  @param <T> the type of the third field of the input Tuple3 DataSet.
  @return a new Graph, where the edge values have been updated according to the
  result of the edgeJoinFunction.