# Reductions

## Available reductions

### GeographicMidpointReduction

[\[source\]](https://github.com/eclipse/deeplearning4j/tree/master/datavec/datavec-api/src/main/java/org/datavec/api/transform/reduce/impl/GeographicMidpointReduction.java)

delimiter is configurable), determine the geographic midpoint. See “geographic midpoint” at: <http://www.geomidpoint.com/methods.html> For implementation algorithm, see: <http://www.geomidpoint.com/calculation.html>

**transform**

```
public Schema transform(Schema inputSchema)
```

* param delim Delimiter for the coordinates in text format. For example, if format is “lat,long” use “,”

### StringReducer

[\[source\]](https://github.com/eclipse/deeplearning4j/tree/master/datavec/datavec-api/src/main/java/org/datavec/api/transform/stringreduce/StringReducer.java)

A StringReducer is used to take a set of examples and reduce them. The idea: suppose you have a large number of columns, and you want to combine/reduce the values in each column.\
StringReducer allows you to specify different reductions for differently for different columns: min, max, sum, mean etc.

Uses are: (1) Reducing examples by a key (2) Reduction operations in time series (windowing ops, etc)

**transform**

```
public Schema transform(Schema schema)
```

Get the output schema, given the input schema

**outputColumnName**

```
public Builder outputColumnName(String outputColumnName)
```

Create a StringReducer builder, and set the default column reduction operation. For any columns that aren’t specified explicitly, they will use the default reduction operation. If a column does have a reduction operation explicitly specified, then it will override the default specified here.

* param defaultOp Default reduction operation to perform

**appendColumns**

```
public Builder appendColumns(String... columns)
```

Reduce the specified columns by taking the minimum value

**prependColumns**

```
public Builder prependColumns(String... columns)
```

Reduce the specified columns by taking the maximum value

**mergeColumns**

```
public Builder mergeColumns(String... columns)
```

Reduce the specified columns by taking the sum of values

**replaceColumn**

```
public Builder replaceColumn(String... columns)
```

Reduce the specified columns by taking the mean of the values

**customReduction**

```
public Builder customReduction(String column, ColumnReduction columnReduction)
```

Reduce the specified column using a custom column reduction functionality.

* param column Column to execute the custom reduction functionality on
* param columnReduction Column reduction to execute on that column

**setIgnoreInvalid**

```
public Builder setIgnoreInvalid(String... columns)
```

When doing the reduction: set the specified columns to ignore any invalid values. Invalid: defined as being not valid according to the ColumnMetaData: {- link ColumnMetaData#isValid(Writable)}. For numerical columns, this typically means being unable to parse the Writable. For example, Writable.toLong() failing for a Long column. If the column has any restrictions (min/max values, regex for Strings etc) these will also be taken into account.

* param columns Columns to set ‘ignore invalid’ for


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://deeplearning4j.konduit.ai/datavec/reference/reductions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
