Expand description
Defines push-based APIs for constructing arrays
§Basic Usage
Builders can be used to build simple, non-nested arrays
let mut a = Int32Builder::new();
a.append_value(1);
a.append_null();
a.append_value(2);
let a = a.finish();
assert_eq!(a, PrimitiveArray::from(vec![Some(1), None, Some(2)]));
let mut a = StringBuilder::new();
a.append_value("foo");
a.append_value("bar");
a.append_null();
let a = a.finish();
assert_eq!(a, StringArray::from_iter([Some("foo"), Some("bar"), None]));
§Nested Usage
Builders can also be used to build more complex nested arrays, such as lists
let mut a = ListBuilder::new(Int32Builder::new());
// [1, 2]
a.values().append_value(1);
a.values().append_value(2);
a.append(true);
// null
a.append(false);
// []
a.append(true);
// [3, null]
a.values().append_value(3);
a.values().append_null();
a.append(true);
// [[1, 2], null, [], [3, null]]
let a = a.finish();
assert_eq!(a, ListArray::from_iter_primitive::<Int32Type, _, _>([
Some(vec![Some(1), Some(2)]),
None,
Some(vec![]),
Some(vec![Some(3), None])]
))
§Using the Extend
trait to append values from an iterable:
let mut builder = StringBuilder::new();
builder.extend(vec![Some("🍐"), Some("🍎"), None]);
assert_eq!(builder.finish().len(), 3);
§Using the Extend
trait to write generic functions:
// For generic methods that fill a list of values for an [`ArrayBuilder`], use the [`Extend`] trait.
fn filter_and_fill<V, I: IntoIterator<Item = V>>(builder: &mut impl Extend<V>, values: I, filter: V)
where V: PartialEq
{
builder.extend(values.into_iter().filter(|v| *v == filter));
}
let mut string_builder = StringBuilder::new();
filter_and_fill(
&mut string_builder,
vec![Some("🍐"), Some("🍎"), None],
Some("🍎"),
);
assert_eq!(string_builder.finish().len(), 1);
let mut int_builder = Int32Builder::new();
filter_and_fill(
&mut int_builder,
vec![Some(11), Some(42), None],
Some(42),
);
assert_eq!(int_builder.finish().len(), 1);
// For generic methods that fill lists-of-lists for an [`ArrayBuilder`], use the [`Extend`] trait.
fn filter_and_fill_if_contains<T, V, I: IntoIterator<Item = Option<V>>>(
list_builder: &mut impl Extend<Option<V>>,
values: I,
filter: Option<T>,
) where
T: PartialEq,
for<'a> &'a V: IntoIterator<Item = &'a Option<T>>,
{
list_builder.extend(values.into_iter().filter(|string: &Option<V>| {
string
.as_ref()
.map(|str: &V| str.into_iter().any(|ch: &Option<T>| ch == &filter))
.unwrap_or(false)
}));
}
let builder = StringBuilder::new();
let mut list_builder = ListBuilder::new(builder);
let pear_pear = vec![Some("🍐"),Some("🍐")];
let pear_app = vec![Some("🍐"),Some("🍎")];
filter_and_fill_if_contains(
&mut list_builder,
vec![Some(pear_pear), Some(pear_app), None],
Some("🍎"),
);
assert_eq!(list_builder.finish().len(), 1);
§Custom Builders
It is common to have a collection of statically defined Rust types that you want to convert to Arrow arrays.
An example of doing so is below
/// A custom row representation
struct MyRow {
i32: i32,
optional_i32: Option<i32>,
string: Option<String>,
i32_list: Option<Vec<Option<i32>>>,
}
/// Converts `Vec<Row>` into `StructArray`
#[derive(Debug, Default)]
struct MyRowBuilder {
i32: Int32Builder,
string: StringBuilder,
i32_list: ListBuilder<Int32Builder>,
}
impl MyRowBuilder {
fn append(&mut self, row: &MyRow) {
self.i32.append_value(row.i32);
self.string.append_option(row.string.as_ref());
self.i32_list.append_option(row.i32_list.as_ref().map(|x| x.iter().copied()));
}
/// Note: returns StructArray to allow nesting within another array if desired
fn finish(&mut self) -> StructArray {
let i32 = Arc::new(self.i32.finish()) as ArrayRef;
let i32_field = Arc::new(Field::new("i32", DataType::Int32, false));
let string = Arc::new(self.string.finish()) as ArrayRef;
let string_field = Arc::new(Field::new("i32", DataType::Utf8, false));
let i32_list = Arc::new(self.i32_list.finish()) as ArrayRef;
let value_field = Arc::new(Field::new_list_field(DataType::Int32, true));
let i32_list_field = Arc::new(Field::new("i32_list", DataType::List(value_field), true));
StructArray::from(vec![
(i32_field, i32),
(string_field, string),
(i32_list_field, i32_list),
])
}
}
/// For building arrays in generic code, use Extend instead of the append_* methods
/// e.g. append_value, append_option, append_null
impl<'a> Extend<&'a MyRow> for MyRowBuilder {
fn extend<T: IntoIterator<Item = &'a MyRow>>(&mut self, iter: T) {
iter.into_iter().for_each(|row| self.append(row));
}
}
/// Converts a slice of [`MyRow`] to a [`RecordBatch`]
fn rows_to_batch(rows: &[MyRow]) -> RecordBatch {
let mut builder = MyRowBuilder::default();
builder.extend(rows);
RecordBatch::from(&builder.finish())
}
§Null / Validity Masks
The NullBufferBuilder
is optimized for creating the null mask for an array.
let mut builder = NullBufferBuilder::new(8);
let mut builder = NullBufferBuilder::new(8);
builder.append_n_non_nulls(7);
builder.append_null();
let buffer = builder.finish().unwrap();
assert_eq!(buffer.len(), 8);
assert_eq!(buffer.iter().collect::<Vec<_>>(), vec![true, true, true, true, true, true, true, false]);
Structs§
- Boolean
Buffer Builder - Builder for
BooleanBuffer
- Boolean
Builder - Builder for
BooleanArray
- Buffer
Builder - Builder for creating a Buffer object.
- Fixed
Size Binary Builder - Builder for
FixedSizeBinaryArray
- Fixed
Size List Builder - Builder for
FixedSizeListArray
- Generic
Byte Builder - Builder for
GenericByteArray
- Generic
Byte Dictionary Builder - Builder for
DictionaryArray
ofGenericByteArray
- Generic
Byte RunBuilder - Builder for
RunArray
ofGenericByteArray
- Generic
Byte View Builder - A builder for
GenericByteViewArray
- Generic
List Builder - Builder for
GenericListArray
- Generic
List View Builder - Builder for
GenericListViewArray
- MapBuilder
- Builder for
MapArray
- MapField
Names - The
Field
names for aMapArray
- Null
Buffer Builder - Builder for creating
NullBuffer
- Null
Builder - Builder for
NullArray
- Primitive
Builder - Builder for
PrimitiveArray
- Primitive
Dictionary Builder - Builder for
DictionaryArray
ofPrimitiveArray
- Primitive
RunBuilder - Builder for
RunArray
ofPrimitiveArray
- Struct
Builder - Builder for
StructArray
- Union
Builder - Builder for
UnionArray
Traits§
- Array
Builder - Trait for dealing with different array builders at runtime
Functions§
- make_
builder - Returns a builder with capacity for
capacity
elements of datatypeDataType
. - make_
view - Create a view based on the given data, block id and offset.
Type Aliases§
- Binary
Builder - Builder for
BinaryArray
- Binary
Dictionary Builder - Builder for
DictionaryArray
ofBinaryArray
- Binary
RunBuilder - Builder for
RunArray
ofBinaryArray
- Binary
View Builder - Array builder for
BinaryViewArray
- Date32
Buffer Builder - Buffer builder for 32-bit date type.
- Date32
Builder - A 32-bit date array builder.
- Date64
Buffer Builder - Buffer builder for 64-bit date type.
- Date64
Builder - A 64-bit date array builder.
- Decimal128
Buffer Builder - Buffer builder for 128-bit decimal type.
- Decimal128
Builder - A decimal 128 array builder
- Decimal256
Buffer Builder - Buffer builder for 256-bit decimal type.
- Decimal256
Builder - A decimal 256 array builder
- Duration
Microsecond Buffer Builder - Buffer builder for elaspsed time of microseconds unit.
- Duration
Microsecond Builder - An elapsed time in microseconds array builder.
- Duration
Millisecond Buffer Builder - Buffer builder for elaspsed time of milliseconds unit.
- Duration
Millisecond Builder - An elapsed time in milliseconds array builder.
- Duration
Nanosecond Buffer Builder - Buffer builder for elaspsed time of nanoseconds unit.
- Duration
Nanosecond Builder - An elapsed time in nanoseconds array builder.
- Duration
Second Buffer Builder - Buffer builder for elaspsed time of second unit.
- Duration
Second Builder - An elapsed time in seconds array builder.
- Float16
Buffer Builder - Buffer builder for 16-bit floating point type.
- Float16
Builder - A 16-bit floating point array builder.
- Float32
Buffer Builder - Buffer builder for 32-bit floating point type.
- Float32
Builder - A 32-bit floating point array builder.
- Float64
Buffer Builder - Buffer builder for 64-bit floating point type.
- Float64
Builder - A 64-bit floating point array builder.
- Generic
Binary Builder - Array builder for
GenericBinaryArray
- Generic
String Builder - Array builder for
GenericStringArray
- Int8
Buffer Builder - Buffer builder for signed 8-bit integer type.
- Int8
Builder - A signed 8-bit integer array builder.
- Int16
Buffer Builder - Buffer builder for signed 16-bit integer type.
- Int16
Builder - A signed 16-bit integer array builder.
- Int32
Buffer Builder - Buffer builder for signed 32-bit integer type.
- Int32
Builder - A signed 32-bit integer array builder.
- Int64
Buffer Builder - Buffer builder for signed 64-bit integer type.
- Int64
Builder - A signed 64-bit integer array builder.
- Interval
DayTime Buffer Builder - Buffer builder for “calendar” interval in days and milliseconds.
- Interval
DayTime Builder - A “calendar” interval in days and milliseconds array builder.
- Interval
Month DayNano Buffer Builder - Buffer builder “calendar” interval in months, days, and nanoseconds.
- Interval
Month DayNano Builder - A “calendar” interval in months, days, and nanoseconds array builder.
- Interval
Year Month Buffer Builder - Buffer builder for “calendar” interval in months.
- Interval
Year Month Builder - A “calendar” interval in months array builder.
- Large
Binary Builder - Builder for
LargeBinaryArray
- Large
Binary Dictionary Builder - Builder for
DictionaryArray
ofLargeBinaryArray
- Large
Binary RunBuilder - Builder for
RunArray
ofLargeBinaryArray
- Large
List Builder - Builder for
LargeListArray
- Large
List View Builder - Builder for
LargeListViewArray
- Large
String Builder - Builder for
LargeStringArray
- Large
String Dictionary Builder - Builder for
DictionaryArray
ofLargeStringArray
- Large
String RunBuilder - Builder for
RunArray
ofLargeStringArray
- List
Builder - Builder for
ListArray
- List
View Builder - Builder for
ListViewArray
- String
Builder - Builder for
StringArray
- String
Dictionary Builder - Builder for
DictionaryArray
ofStringArray
- String
RunBuilder - Builder for
RunArray
ofStringArray
- String
View Builder - Array builder for
StringViewArray
- Time32
Millisecond Buffer Builder - Buffer builder for 32-bit elaspsed time since midnight of millisecond unit.
- Time32
Millisecond Builder - A 32-bit elaspsed time in milliseconds array builder.
- Time32
Second Buffer Builder - Buffer builder for 32-bit elaspsed time since midnight of second unit.
- Time32
Second Builder - A 32-bit elaspsed time in seconds array builder.
- Time64
Microsecond Buffer Builder - Buffer builder for 64-bit elaspsed time since midnight of microsecond unit.
- Time64
Microsecond Builder - A 64-bit elaspsed time in microseconds array builder.
- Time64
Nanosecond Buffer Builder - Buffer builder for 64-bit elaspsed time since midnight of nanosecond unit.
- Time64
Nanosecond Builder - A 64-bit elaspsed time in nanoseconds array builder.
- Timestamp
Microsecond Buffer Builder - Buffer builder for timestamp type of microsecond unit.
- Timestamp
Microsecond Builder - A timestamp microsecond array builder.
- Timestamp
Millisecond Buffer Builder - Buffer builder for timestamp type of millisecond unit.
- Timestamp
Millisecond Builder - A timestamp millisecond array builder.
- Timestamp
Nanosecond Buffer Builder - Buffer builder for timestamp type of nanosecond unit.
- Timestamp
Nanosecond Builder - A timestamp nanosecond array builder.
- Timestamp
Second Buffer Builder - Buffer builder for timestamp type of second unit.
- Timestamp
Second Builder - A timestamp second array builder.
- UInt8
Buffer Builder - Buffer builder for usigned 8-bit integer type.
- UInt8
Builder - An usigned 8-bit integer array builder.
- UInt16
Buffer Builder - Buffer builder for usigned 16-bit integer type.
- UInt16
Builder - An usigned 16-bit integer array builder.
- UInt32
Buffer Builder - Buffer builder for usigned 32-bit integer type.
- UInt32
Builder - An usigned 32-bit integer array builder.
- UInt64
Buffer Builder - Buffer builder for usigned 64-bit integer type.
- UInt64
Builder - An usigned 64-bit integer array builder.