37 releases (major breaking)

new 54.2.1 Feb 27, 2025
54.0.0 Dec 23, 2024
53.4.0 Jan 18, 2025
53.3.0 Nov 20, 2024
29.0.0 Dec 12, 2022

#156 in Data structures

Download history 260535/week @ 2024-10-31 291304/week @ 2024-11-07 262998/week @ 2024-11-14 243512/week @ 2024-11-21 158929/week @ 2024-11-28 251808/week @ 2024-12-05 258183/week @ 2024-12-12 145859/week @ 2024-12-19 96115/week @ 2024-12-26 244439/week @ 2025-01-02 313098/week @ 2025-01-09 244133/week @ 2025-01-16 269200/week @ 2025-01-23 266235/week @ 2025-01-30 326816/week @ 2025-02-06 214695/week @ 2025-02-13

1,125,955 downloads per month
Used in 523 crates (18 directly)

Apache-2.0

3MB
57K SLoC

Arrow ordering kernels

Sort RecordBatch

#
let a: ArrayRef = Arc::new(Int32Array::from(vec![1, 2, 3, 4]));
let b: ArrayRef = Arc::new(StringArray::from(vec!["b", "a", "e", "d"]));
let batch = RecordBatch::try_from_iter(vec![("a", a), ("b", b)]).unwrap();

// Sort by column 1
let indices = sort_to_indices(batch.column(1), None, None).unwrap();

// Apply indices to batch columns
let columns = batch.columns().iter().map(|c| take(&*c, &indices, None).unwrap()).collect();
let sorted = RecordBatch::try_new(batch.schema(), columns).unwrap();

let col1 = sorted.column(0).as_primitive::<Int32Type>();
assert_eq!(col1.values(), &[2, 1, 4, 3]);

Dependencies

~4–9MB
~81K SLoC