Skip to content

Commit

Permalink
Sorts column data using fastutil .sort methods (#778)
Browse files Browse the repository at this point in the history
  • Loading branch information
emilianbold authored Mar 10, 2020
1 parent f8a979d commit 0db7d75
Show file tree
Hide file tree
Showing 14 changed files with 53 additions and 87 deletions.
9 changes: 3 additions & 6 deletions core/src/main/java/tech/tablesaw/api/BooleanColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@
import it.unimi.dsi.fastutil.bytes.Byte2IntMap;
import it.unimi.dsi.fastutil.bytes.Byte2IntOpenHashMap;
import it.unimi.dsi.fastutil.bytes.ByteArrayList;
import it.unimi.dsi.fastutil.bytes.ByteArrays;
import it.unimi.dsi.fastutil.bytes.ByteComparator;
import it.unimi.dsi.fastutil.bytes.ByteComparators;
import it.unimi.dsi.fastutil.bytes.ByteIterator;
import it.unimi.dsi.fastutil.bytes.ByteListIterator;
import it.unimi.dsi.fastutil.bytes.ByteOpenHashSet;
Expand Down Expand Up @@ -59,8 +58,6 @@ public class BooleanColumn extends AbstractColumn<BooleanColumn, Boolean>
BooleanFillers<BooleanColumn>,
BooleanFilters {

private final ByteComparator descendingByteComparator = (o1, o2) -> Byte.compare(o2, o1);

private ByteArrayList data;

private final IntComparator comparator =
Expand Down Expand Up @@ -297,12 +294,12 @@ public BooleanColumn copy() {

@Override
public void sortAscending() {
ByteArrays.mergeSort(data.elements());
data.sort(ByteComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
ByteArrays.mergeSort(data.elements(), descendingByteComparator);
data.sort(ByteComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down
11 changes: 4 additions & 7 deletions core/src/main/java/tech/tablesaw/api/DateColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntArrays;
import it.unimi.dsi.fastutil.ints.IntComparator;
import it.unimi.dsi.fastutil.ints.IntComparators;
import it.unimi.dsi.fastutil.ints.IntIterator;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
import java.nio.ByteBuffer;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
Expand All @@ -44,7 +44,6 @@
import tech.tablesaw.columns.dates.DateMapFunctions;
import tech.tablesaw.columns.dates.PackedLocalDate;
import tech.tablesaw.selection.Selection;
import tech.tablesaw.sorting.comparators.DescendingIntComparator;

/** A column in a base table that contains float values */
public class DateColumn extends AbstractColumn<DateColumn, LocalDate>
Expand All @@ -53,8 +52,6 @@ public class DateColumn extends AbstractColumn<DateColumn, LocalDate>
DateMapFunctions,
CategoricalColumn<LocalDate> {

private final IntComparator reverseIntComparator = DescendingIntComparator.instance();

private IntArrayList data;

private final IntComparator comparator =
Expand Down Expand Up @@ -210,12 +207,12 @@ public DateColumn lag(int n) {

@Override
public void sortAscending() {
Arrays.parallelSort(data.elements());
data.sort(IntComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
IntArrays.parallelQuickSort(data.elements(), reverseIntComparator);
data.sort(IntComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down Expand Up @@ -437,7 +434,7 @@ public int countMissing() {
public List<LocalDate> top(int n) {
List<LocalDate> top = new ArrayList<>();
int[] values = data.toIntArray();
IntArrays.parallelQuickSort(values, DescendingIntComparator.instance());
IntArrays.parallelQuickSort(values, IntComparators.OPPOSITE_COMPARATOR);
for (int i = 0; i < n && i < values.length; i++) {
top.add(PackedLocalDate.asLocalDate(values[i]));
}
Expand Down
12 changes: 4 additions & 8 deletions core/src/main/java/tech/tablesaw/api/DateTimeColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import it.unimi.dsi.fastutil.ints.IntComparator;
import it.unimi.dsi.fastutil.longs.LongArrayList;
import it.unimi.dsi.fastutil.longs.LongArrays;
import it.unimi.dsi.fastutil.longs.LongComparator;
import it.unimi.dsi.fastutil.longs.LongComparators;
import it.unimi.dsi.fastutil.longs.LongIterator;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongSet;
Expand All @@ -31,7 +31,6 @@
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
Expand All @@ -50,7 +49,6 @@
import tech.tablesaw.columns.datetimes.PackedLocalDateTime;
import tech.tablesaw.columns.temporal.TemporalFillers;
import tech.tablesaw.selection.Selection;
import tech.tablesaw.sorting.comparators.DescendingLongComparator;

/** A column in a table that contains long-integer encoded (packed) local date-time values */
public class DateTimeColumn extends AbstractColumn<DateTimeColumn, LocalDateTime>
Expand All @@ -59,8 +57,6 @@ public class DateTimeColumn extends AbstractColumn<DateTimeColumn, LocalDateTime
TemporalFillers<LocalDateTime, DateTimeColumn>,
CategoricalColumn<LocalDateTime> {

private final LongComparator reverseLongComparator = DescendingLongComparator.instance();

private LongArrayList data;

private final IntComparator comparator =
Expand Down Expand Up @@ -293,12 +289,12 @@ public void clear() {

@Override
public void sortAscending() {
Arrays.parallelSort(data.elements());
data.sort(LongComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
LongArrays.parallelQuickSort(data.elements(), reverseLongComparator);
data.sort(LongComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down Expand Up @@ -559,7 +555,7 @@ public DateTimeColumn set(int index, LocalDateTime value) {
public List<LocalDateTime> top(int n) {
List<LocalDateTime> top = new ArrayList<>();
long[] values = data.toLongArray();
LongArrays.parallelQuickSort(values, DescendingLongComparator.instance());
LongArrays.parallelQuickSort(values, LongComparators.OPPOSITE_COMPARATOR);
for (int i = 0; i < n && i < values.length; i++) {
top.add(PackedLocalDateTime.asLocalDateTime(values[i]));
}
Expand Down
13 changes: 4 additions & 9 deletions core/src/main/java/tech/tablesaw/api/DoubleColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.doubles.DoubleArrayList;
import it.unimi.dsi.fastutil.doubles.DoubleArrays;
import it.unimi.dsi.fastutil.doubles.DoubleComparator;
import it.unimi.dsi.fastutil.doubles.DoubleComparators;
import it.unimi.dsi.fastutil.doubles.DoubleIterator;
import it.unimi.dsi.fastutil.doubles.DoubleListIterator;
import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet;
Expand All @@ -28,11 +28,6 @@
public class DoubleColumn extends NumberColumn<DoubleColumn, Double>
implements NumberFillers<DoubleColumn> {

/**
* Compares two doubles, such that a sort based on this comparator would sort in descending order
*/
private final DoubleComparator descendingComparator = (o2, o1) -> (Double.compare(o1, o2));

private final DoubleArrayList data;

protected DoubleColumn(String name, DoubleArrayList data) {
Expand Down Expand Up @@ -182,7 +177,7 @@ public DoubleColumn unique() {
public DoubleColumn top(int n) {
DoubleArrayList top = new DoubleArrayList();
double[] values = data.toDoubleArray();
DoubleArrays.parallelQuickSort(values, descendingComparator);
DoubleArrays.parallelQuickSort(values, DoubleComparators.OPPOSITE_COMPARATOR);
for (int i = 0; i < n && i < values.length; i++) {
top.add(values[i]);
}
Expand Down Expand Up @@ -397,12 +392,12 @@ public boolean isMissing(int rowNumber) {

@Override
public void sortAscending() {
DoubleArrays.parallelQuickSort(data.elements());
data.sort(DoubleComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
DoubleArrays.parallelQuickSort(data.elements(), descendingComparator);
data.sort(DoubleComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down
13 changes: 4 additions & 9 deletions core/src/main/java/tech/tablesaw/api/FloatColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.floats.FloatArrayList;
import it.unimi.dsi.fastutil.floats.FloatArrays;
import it.unimi.dsi.fastutil.floats.FloatComparator;
import it.unimi.dsi.fastutil.floats.FloatComparators;
import it.unimi.dsi.fastutil.floats.FloatListIterator;
import it.unimi.dsi.fastutil.floats.FloatOpenHashSet;
import it.unimi.dsi.fastutil.floats.FloatSet;
Expand All @@ -17,11 +17,6 @@

public class FloatColumn extends NumberColumn<FloatColumn, Float> {

/**
* Compares two doubles, such that a sort based on this comparator would sort in descending order
*/
private final FloatComparator descendingComparator = (o2, o1) -> (Float.compare(o1, o2));

private final FloatArrayList data;

private FloatColumn(String name, FloatArrayList data) {
Expand Down Expand Up @@ -125,7 +120,7 @@ public FloatColumn unique() {
public FloatColumn top(int n) {
FloatArrayList top = new FloatArrayList();
float[] values = data.toFloatArray();
FloatArrays.parallelQuickSort(values, descendingComparator);
FloatArrays.parallelQuickSort(values, FloatComparators.OPPOSITE_COMPARATOR);
for (int i = 0; i < n && i < values.length; i++) {
top.add(values[i]);
}
Expand Down Expand Up @@ -305,12 +300,12 @@ public Column<Float> setMissing(int i) {

@Override
public void sortAscending() {
FloatArrays.parallelQuickSort(data.elements());
data.sort(FloatComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
FloatArrays.parallelQuickSort(data.elements(), descendingComparator);
data.sort(FloatComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down
12 changes: 4 additions & 8 deletions core/src/main/java/tech/tablesaw/api/InstantColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import it.unimi.dsi.fastutil.ints.IntComparator;
import it.unimi.dsi.fastutil.longs.LongArrayList;
import it.unimi.dsi.fastutil.longs.LongArrays;
import it.unimi.dsi.fastutil.longs.LongComparator;
import it.unimi.dsi.fastutil.longs.LongComparators;
import it.unimi.dsi.fastutil.longs.LongIterator;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongSet;
Expand All @@ -33,7 +33,6 @@
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
Expand All @@ -52,7 +51,6 @@
import tech.tablesaw.columns.temporal.TemporalFillers;
import tech.tablesaw.columns.temporal.TemporalFilters;
import tech.tablesaw.selection.Selection;
import tech.tablesaw.sorting.comparators.DescendingLongComparator;

/** A column in a table that contains long-integer encoded (packed) local date-time values */
public class InstantColumn extends AbstractColumn<InstantColumn, Instant>
Expand All @@ -61,8 +59,6 @@ public class InstantColumn extends AbstractColumn<InstantColumn, Instant>
TemporalFilters<Instant>,
CategoricalColumn<Instant> {

private final LongComparator reverseLongComparator = DescendingLongComparator.instance();

private LongArrayList data;

private final IntComparator comparator =
Expand Down Expand Up @@ -283,12 +279,12 @@ public void clear() {

@Override
public void sortAscending() {
Arrays.parallelSort(data.elements());
data.sort(LongComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
LongArrays.parallelQuickSort(data.elements(), reverseLongComparator);
data.sort(LongComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down Expand Up @@ -546,7 +542,7 @@ public InstantColumn set(int index, Instant value) {
public List<Instant> top(int n) {
List<Instant> top = new ArrayList<>();
long[] values = data.toLongArray();
LongArrays.parallelQuickSort(values, DescendingLongComparator.instance());
LongArrays.parallelQuickSort(values, LongComparators.OPPOSITE_COMPARATOR);
for (int i = 0; i < n && i < values.length; i++) {
top.add(PackedInstant.asInstant(values[i]));
}
Expand Down
11 changes: 4 additions & 7 deletions core/src/main/java/tech/tablesaw/api/IntColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntArrays;
import it.unimi.dsi.fastutil.ints.IntComparator;
import it.unimi.dsi.fastutil.ints.IntComparators;
import it.unimi.dsi.fastutil.ints.IntListIterator;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
Expand All @@ -19,9 +19,6 @@
public class IntColumn extends NumberColumn<IntColumn, Integer>
implements CategoricalColumn<Integer> {

/** Compares two ints, such that a sort based on this comparator would sort in descending order */
private final IntComparator descendingComparator = (o2, o1) -> (Integer.compare(o1, o2));

private final IntArrayList data;

protected IntColumn(final String name, IntArrayList data) {
Expand Down Expand Up @@ -131,7 +128,7 @@ public IntColumn unique() {
public IntColumn top(int n) {
final IntArrayList top = new IntArrayList();
final int[] values = data.toIntArray();
IntArrays.parallelQuickSort(values, descendingComparator);
IntArrays.parallelQuickSort(values, IntComparators.OPPOSITE_COMPARATOR);
for (int i = 0; i < n && i < values.length; i++) {
top.add(values[i]);
}
Expand Down Expand Up @@ -333,12 +330,12 @@ public boolean isMissing(int rowNumber) {

@Override
public void sortAscending() {
IntArrays.parallelQuickSort(data.elements());
data.sort(IntComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
IntArrays.parallelQuickSort(data.elements(), descendingComparator);
data.sort(IntComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down
11 changes: 4 additions & 7 deletions core/src/main/java/tech/tablesaw/api/LongColumn.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.google.common.base.Preconditions;
import it.unimi.dsi.fastutil.longs.LongArrayList;
import it.unimi.dsi.fastutil.longs.LongArrays;
import it.unimi.dsi.fastutil.longs.LongComparator;
import it.unimi.dsi.fastutil.longs.LongComparators;
import it.unimi.dsi.fastutil.longs.LongListIterator;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongSet;
Expand All @@ -20,9 +20,6 @@

public class LongColumn extends NumberColumn<LongColumn, Long> implements CategoricalColumn<Long> {

/** Compares two ints, such that a sort based on this comparator would sort in descending order */
private final LongComparator descendingComparator = (o2, o1) -> (Long.compare(o1, o2));

private final LongArrayList data;

private LongColumn(String name, LongArrayList data) {
Expand Down Expand Up @@ -133,7 +130,7 @@ public LongColumn unique() {
public LongColumn top(int n) {
final LongArrayList top = new LongArrayList();
final long[] values = data.toLongArray();
LongArrays.parallelQuickSort(values, descendingComparator);
LongArrays.parallelQuickSort(values, LongComparators.OPPOSITE_COMPARATOR);
for (int i = 0; i < n && i < values.length; i++) {
top.add(values[i]);
}
Expand Down Expand Up @@ -360,12 +357,12 @@ public Column<Long> setMissing(int i) {

@Override
public void sortAscending() {
LongArrays.parallelQuickSort(data.elements());
data.sort(LongComparators.NATURAL_COMPARATOR);
}

@Override
public void sortDescending() {
LongArrays.parallelQuickSort(data.elements(), descendingComparator);
data.sort(LongComparators.OPPOSITE_COMPARATOR);
}

@Override
Expand Down
Loading

0 comments on commit 0db7d75

Please sign in to comment.