It is not frowned upon to use the ArrayData::Make classes, you just have to
ensure the order of buffers matches what the specialized Array class
expects (also matching the type you're passing to ArrayData). I'd say it is
the "preferred" way if your data is already in the required layout, and the
best way if you want effective zero-copy.

I created https://issues.apache.org/jira/browse/ARROW-4999 to track
improving the documentation.

François

On Fri, Mar 22, 2019 at 11:26 AM Felipe Aramburu <fel...@blazingdb.com>
wrote:

> Is there a way to use a builder to be able to provide a bit per value LSB
> as is described in the documentation? I have this already and it seems
> silly to convert it to something else so that arrow can then make it the
> same format as what I had to begin with. I know there is the ArrayData
> class that has a make function that seems to allow me to do this but I am
> trying to do things as the documentation suggest which I assumed was the
> preferred method of doing this.
>
>
>
> On Fri, Mar 22, 2019 at 8:13 AM Francois Saint-Jacques <
> fsaintjacq...@gmail.com> wrote:
>
> > Actually, this specific method seems to use a byte per value as you
> > questioned. I think it's worth adding documentation and an explicit
> warning
> > if it confused me. I'll let bkietz chime in to comment on the usage.
> >
> > François
> >
> > On Fri, Mar 22, 2019 at 10:57 AM Francois Saint-Jacques <
> > fsaintjacq...@gmail.com> wrote:
> >
> > > Hello Felipe,
> > >
> > > it's a bit per value as per memory layout documentation.
> > >
> > > François
> > >
> > >
> > >
> > > On Fri, Mar 22, 2019 at 10:48 AM Felipe Aramburu <fel...@blazingdb.com
> >
> > > wrote:
> > >
> > >> In the builder base class I see this api
> > >>
> > >>
> > >>
> >
> https://github.com/apache/arrow/blob/ad1697e5d25eeaff5630421f55b0120f45cf0ce1/cpp/src/arrow/array/builder_base.h#L149
> > >>
> > >>     // Vector append. Treat each zero byte as a nullzero. If
> valid_bytes
> > >> is
> > >> null
> > >>     // assume all of length bits are valid.
> > >>     void UnsafeAppendToBitmap(const uint8_t* valid_bytes, int64_t
> > length)
> > >>
> > >> Is valid_bytes an allocation of size (int8_t) * length, using an
> entire
> > >> byte to indicate validity for each element in the array or is this a
> > null
> > >> bitmask where in each byte in valid_bytes encodes 8 values, one per
> bit?
> > >>
> > >> If this is using a byte per value is there an approved way of using a
> > >> builder to initialize an array using the memory layout described here
> > >> https://arrow.apache.org/docs/memory_layout.html#null-bitmaps?
> > >>
> > >
> >
>

Reply via email to