code: public <T> Graph<K, VV, EV> joinWithVertices(DataSet<Tuple2<K, T>> inputDataSet,
  			final VertexJoinFunction<VV, T> vertexJoinFunction) {
  
  		DataSet<Vertex<K, VV>> resultedVertices = this.getVertices()
  				.coGroup(inputDataSet).where(0).equalTo(0)
  				.with(new ApplyCoGroupToVertexValues<>(vertexJoinFunction))
  					.name("Join with vertices");
  		return new Graph<>(resultedVertices, this.edges, this.context);
  	}
docs: Joins the vertex DataSet of this graph with an input Tuple2 DataSet and applies
  a user-defined transformation on the values of the matched records.
  The vertex ID and the first field of the Tuple2 DataSet are used as the join keys.
  
  @param inputDataSet the Tuple2 DataSet to join with.
  The first field of the Tuple2 is used as the join key and the second field is passed
  as a parameter to the transformation function.
  @param vertexJoinFunction the transformation function to apply.
  The first parameter is the current vertex value and the second parameter is the value
  of the matched Tuple2 from the input DataSet.
  @return a new Graph, where the vertex values have been updated according to the
  result of the vertexJoinFunction.
  
  @param <T> the type of the second field of the input Tuple2 DataSet.