code: @SuppressWarnings("unchecked")
  	@PublicEvolving
  	public <X extends Tuple> DataStreamSink<T> writeAsCsv(
  			String path,
  			WriteMode writeMode,
  			String rowDelimiter,
  			String fieldDelimiter) {
  		Preconditions.checkArgument(
  			getType().isTupleType(),
  			"The writeAsCsv() method can only be used on data streams of tuples.");
  
  		CsvOutputFormat<X> of = new CsvOutputFormat<>(
  			new Path(path),
  			rowDelimiter,
  			fieldDelimiter);
  
  		if (writeMode != null) {
  			of.setWriteMode(writeMode);
  		}
  
  		return writeUsingOutputFormat((OutputFormat<T>) of);
  	}
docs: Writes a DataStream to the file specified by the path parameter. The
  writing is performed periodically every millis milliseconds.
  
  <p>For every field of an element of the DataStream the result of {@link Object#toString()}
  is written. This method can only be used on data streams of tuples.
  
  @param path
  the path pointing to the location the text file is written to
  @param writeMode
  Controls the behavior for existing files. Options are
  NO_OVERWRITE and OVERWRITE.
  @param rowDelimiter
  the delimiter for two rows
  @param fieldDelimiter
  the delimiter for two fields
  
  @return the closed DataStream