code: public <T extends Tuple> DataSource<T> tupleType(Class<T> targetType) {
  		Validate.notNull(targetType, "The target type class must not be null.");
  		if (!Tuple.class.isAssignableFrom(targetType)) {
  			throw new IllegalArgumentException("The target type must be a subclass of " + Tuple.class.getName());
  		}
  		
  		@SuppressWarnings("unchecked")
  		TupleTypeInfo<T> typeInfo = (TupleTypeInfo<T>) TypeExtractor.createTypeInfo(targetType);
  		CsvInputFormat<T> inputFormat = new CsvInputFormat<T>(path);
  		
  		Class<?>[] classes = new Class<?>[typeInfo.getArity()];
  		for (int i = 0; i < typeInfo.getArity(); i++) {
  			classes[i] = typeInfo.getTypeAt(i).getTypeClass();
  		}
  		
  		configureInputFormat(inputFormat, classes);
  		return new DataSource<T>(executionContext, inputFormat, typeInfo);
  	}
docs: Configures the reader to read the CSV data and parse it to the given type. The type must be a subclass of
  {@link Tuple}. The type information for the fields is obtained from the type class. The type
  consequently needs to specify all generic field types of the tuple.
  
  @param targetType The class of the target type, needs to be a subclass of Tuple.
  @return The DataSet representing the parsed CSV data.