code: @SuppressWarnings("unchecked")
  	public <K, VV, EV> Graph<K, VV, EV> types(Class<K> vertexKey, Class<VV> vertexValue,
  			Class<EV> edgeValue) {
  
  		if (edgeReader == null) {
  			throw new RuntimeException("The edge input file cannot be null!");
  		}
  
  		DataSet<Tuple3<K, K, EV>> edges = edgeReader.types(vertexKey, vertexKey, edgeValue);
  
  		// the vertex value can be provided by an input file or a user-defined mapper
  		if (vertexReader != null) {
  			DataSet<Tuple2<K, VV>> vertices = vertexReader
  				.types(vertexKey, vertexValue)
  					.name(GraphCsvReader.class.getName());
  
  			return Graph.fromTupleDataSet(vertices, edges, executionContext);
  		}
  		else if (mapper != null) {
  			return Graph.fromTupleDataSet(edges, (MapFunction<K, VV>) mapper, executionContext);
  		}
  		else {
  			throw new RuntimeException("Vertex values have to be specified through a vertices input file"
  					+ "or a user-defined map function.");
  		}
  	}
docs: Creates a Graph from CSV input with vertex values and edge values.
  The vertex values are specified through a vertices input file or a user-defined map function.
  
  @param vertexKey the type of the vertex IDs
  @param vertexValue the type of the vertex values
  @param edgeValue the type of the edge values
  @return a Graph with vertex and edge values.