Hi Adam,

Arrow does not support nesting tables inside other tables. However, a
record batch
is interchangeable with a struct array so you could achieve something
similar
by converting from a RecordBatch with columns `...c` to a StructArray with
child
arrays `...c`. In C++ we have /RecordBatch::{To,From}StructArray/ for this
purpose.
Only from_struct_array is exposed in python but to_struct_array would be a
simple
change to make.

Grouping could then be emulated by sorting the StructArray and wrapping it
in a
ListArray so that each list item contains the rows of a group. (This is
similar to
Impala's interpretation of list and map columns as persistent
joins/groupings
https://docs.cloudera.com/documentation/enterprise/5-5-x/topics/impala_complex_types.html#complex_types_queries
)

Would that be sufficient for your use case?

On Thu, Oct 29, 2020 at 5:19 PM Adam Lippai <a...@rigo.sk> wrote:

> This is what I want to extend for multiple tables:
>
> https://issues.apache.org/jira/browse/ARROW-10045?focusedCommentId=17207790&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17207790
> I would need to come up with custom binary wrapper for multiple serialized
> pyarrow tables and since Arrow supports hierarchical data to some level, I
> was looking for built-in support of nested tables.
> I understand this might not be available on API level.
>
> Best regards,
> Adam Lippai
>
> On Thu, Oct 29, 2020 at 10:14 PM Adam Lippai <a...@rigo.sk> wrote:
>
> > If I have a DataFrame with columns Date, Category, Value and group by
> > Category I'll have multiple DataFrames with Date, Value columns.
> > The result of the groupby is DataFrameGroupBy, which can't be serialized.
> > This is why I tried to assemble a nested DataFrame instead (like the one
> in
> > the SO link previously), but that doesn't work either.
> >
> > As Apache Arrow JS doesn't support groupby (processing the original DF on
> > the client-side), I was thinking of pushing the groupby operation to the
> > server side (pyarrow), doing the groupby in pandas before serializing and
> > sending it to the client.
> > I was wondering whether this (nested arrow tables) is a supported feature
> > or not (by calling chained table.toArray() or similar solution)
> > Currently I process it in pure JS, it's not that ugly, but not really
> > idiomatic either. The lack of Categorial data type and processing it row
> by
> > row certainly has it's perf. price.
> >
> > Best regards,
> > Adam Lippai
> >
> > On Thu, Oct 29, 2020 at 9:39 PM Joris Van den Bossche <
> > jorisvandenboss...@gmail.com> wrote:
> >
> >> Can you give a more specific example of what kind of hierarchical data
> >> you want to serialize? (eg the output of a groupby operation in pandas
> >> typically is still a dataframe that can be converted to pyarrow and
> >> serialized).
> >>
> >> In general, for hierarchical data we have the nested data types (eg
> >> struct type when you nest "multiple columns in a single column").
> >>
> >> Joris
> >>
> >>
> >> On Thu, 29 Oct 2020 at 15:29, Adam Lippai <a...@rigo.sk> wrote:
> >> >
> >> > Hi,
> >> >
> >> > is there a way to serialize (IPC) hierarchical tabular data (eg.
> output
> >> of
> >> > pandas groupby) in python?
> >> > I've tried to call pa.ipc.serialize_pandas() on this example, but it
> >> throws
> >> > error:
> >> >
> https://stackoverflow.com/questions/51505504/pandas-nesting-dataframes
> >> >
> >> > Best regards,
> >> > Adam Lippai
> >>
> >
>

Reply via email to