Hello Eugene,

On Mon, 20 Sep 2021 09:33:26 +0000
"Weber, Eugene F Jr CIV (USA)" <[email protected]> wrote:
> 
> I've gone through the documentation but I'm still unclear about the usage of 
> buffers with respect to arrays.
> 
> "A Buffer encapsulates a pointer and data size .... Buffers are untyped: they 
> simply denote a physical memory area"
> 
> "The central type in Arrow is the class arrow::Array. An array represents a 
> known-length sequence of values all having the same type. Internally, those 
> values are represented by one or several buffers ...."
> 
> The Array section then goes on to explain how to build Arrays with the 
> ArrayBuilder base class, and concrete subclasses. There doesn't appear to be 
> any need to allocate buffer space first. There is also a BufferBuilder class. 
> But since there does not appear to be a way associate a created buffer with 
> an array, I don't understand when explicit buffer creation would be used?

The C++ documentation is unfortunately incomplete.  Using ArrayBuilder
subclasses is one way of creating arrays if you want to populate them
with logical values (e.g. int64_t values for a Int64Array).
But you can also create buffers directly and wrap them inside a
ArrayData container:
https://github.com/apache/arrow/blob/master/cpp/src/arrow/array/data.h#L73

(this is useful if e.g. you want your array to point to *existing*
memory)

Then you can call MakeArray to get an actual Array subclass from the
ArrayData container:
https://github.com/apache/arrow/blob/master/cpp/src/arrow/array/util.h#L38

Regards

Antoine.


Reply via email to