[ 
https://issues.apache.org/jira/browse/ARROW-17820?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17629225#comment-17629225
 ] 

Weston Pace edited comment on ARROW-17820 at 11/4/22 11:24 PM:
---------------------------------------------------------------

{quote}
Such an approach doesn't really fit our kernels / Acero, I think. One option 
could be to have a generic kernel to "map" another kernel on the list values. 
where you can pass the function name you want to apply, and a FunctionOptions 
object matching the kernel. Would something like this be possible technically?
{quote}

Yes, I think that should be possible for unary kernels.  Though I think mapping 
a single kernel (as opposed to a single expression) might be a bit limiting, 
though maybe it isn't so bad.  For example, what if a user wants to do 
something like {{map(lambda f: f.upper() * 2, ["a", "b", "c"])}}

Another thing is that it should be valid to use n-ary functions too provided 
the other arguments are scalars.  This discussion has come up in Substrait with 
respect to lambdas (https://github.com/substrait-io/substrait/issues/349).

Perhaps the "map function" for {{List<T>}} could be an expression bound to a 
schema of "\{item: T\}" (e.g. so you could do {{field_ref(0)}} or 
{{field_ref("item")}}).

Though if the map function is an expression then a kernel would have to execute 
an entire expression which may or may not be doable (I've reached the limit of 
my imagination for a Friday :)


was (Author: westonpace):
{quote}
Such an approach doesn't really fit our kernels / Acero, I think. One option 
could be to have a generic kernel to "map" another kernel on the list values. 
where you can pass the function name you want to apply, and a FunctionOptions 
object matching the kernel. Would something like this be possible technically?
{quote}

Yes, I think that should be possible for unary kernels.  Though I think mapping 
a single kernel (as opposed to a single expression) might be a bit limiting, 
though maybe it isn't so bad.  For example, what if a user wants to do 
something like {{map(lambda f: f.upper() * 2, ["a", "b", "c"])}}

Another thing is that it should be valid to use n-ary functions too provided 
the other arguments are scalars.  This discussion has come up in Substrait with 
respect to lambdas (https://github.com/substrait-io/substrait/issues/349).

Perhaps the "map function" for {{List<T>}} could be an expression bound to a 
schema of "{item: T}" (e.g. so you could do {{field_ref(0)}} or 
{{field_ref("item")}}).

Though if the map function is an expression then a kernel would have to execute 
an entire expression which may or may not be doable (I've reached the limit of 
my imagination for a Friday :)

> [C++] Implement arithmetic kernels on List(number)
> --------------------------------------------------
>
>                 Key: ARROW-17820
>                 URL: https://issues.apache.org/jira/browse/ARROW-17820
>             Project: Apache Arrow
>          Issue Type: New Feature
>          Components: C++, Python
>            Reporter: Adam Lippai
>            Priority: Major
>              Labels: kernel, query-engine
>
> eg. rounding in list(float64()), similar to a map or foreach



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to