MCPcopy Create free account
hub / github.com/apache/arrow-rs / new_from_strings

Method new_from_strings

arrow-array/src/array/map_array.rs:327–362  ·  view source on GitHub ↗

Creates map array from provided keys, values and entry_offsets.

(
        keys: impl Iterator<Item = &'a str>,
        values: &dyn Array,
        entry_offsets: &[u32],
    )

Source from the content-addressed store, hash-verified

325
326 /// Creates map array from provided keys, values and entry_offsets.
327 pub fn new_from_strings<'a>(
328 keys: impl Iterator<Item = &'a str>,
329 values: &dyn Array,
330 entry_offsets: &[u32],
331 ) -> Result<Self, ArrowError> {
332 let entry_offsets_buffer = Buffer::from(entry_offsets.to_byte_slice());
333 let keys_data = StringArray::from_iter_values(keys);
334
335 let keys_field = Arc::new(Field::new("keys", DataType::Utf8, false));
336 let values_field = Arc::new(Field::new(
337 "values",
338 values.data_type().clone(),
339 values.null_count() > 0,
340 ));
341
342 let entry_struct = StructArray::from(vec![
343 (keys_field, Arc::new(keys_data) as ArrayRef),
344 (values_field, make_array(values.to_data())),
345 ]);
346
347 let map_data_type = DataType::Map(
348 Arc::new(Field::new(
349 "entries",
350 entry_struct.data_type().clone(),
351 false,
352 )),
353 false,
354 );
355 let map_data = ArrayData::builder(map_data_type)
356 .len(entry_offsets.len() - 1)
357 .add_buffer(entry_offsets_buffer)
358 .add_child_data(entry_struct.into_data())
359 .build()?;
360
361 Ok(MapArray::from(map_data))
362 }
363}
364
365/// SAFETY: Correctly implements the contract of Arrow Arrays

Callers

nothing calls this directly

Calls 10

to_byte_sliceMethod · 0.80
add_child_dataMethod · 0.80
add_bufferMethod · 0.80
MapClass · 0.50
cloneMethod · 0.45
data_typeMethod · 0.45
null_countMethod · 0.45
buildMethod · 0.45
lenMethod · 0.45
into_dataMethod · 0.45

Tested by

no test coverage detected