You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "Eduardo Ponce (Jira)" <ji...@apache.org> on 2021/04/20 06:08:00 UTC

[jira] [Commented] (ARROW-11508) [C++][Compute] Add support for generic conversions to Function::DispatchBest

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

Eduardo Ponce commented on ARROW-11508:
---------------------------------------

A possible solution is establish rules for converting to a "base/operational" form each generic datum and define them as method _to_base/operational_form()_. When an operation's inputs are of different non-primitive types and have the conversion methods, then convert them to their conformant "base/operational" form, and then apply the operation. The following are aspects to consider:
 * Each generic datum should implement _to_base/operational_form()_
 * What type should the result be? (Only applicable to operations that return a result of a similar type).
 * Transforming to the "base/operational" form may have performance implications, so the invoking code should be aware of this.
 * How to implement the rules of conversion?
 * For cases where the operation is applied to independent data, there is no direct method of inferring which datum to promote or demote.

> [C++][Compute] Add support for generic conversions to Function::DispatchBest
> ----------------------------------------------------------------------------
>
>                 Key: ARROW-11508
>                 URL: https://issues.apache.org/jira/browse/ARROW-11508
>             Project: Apache Arrow
>          Issue Type: New Feature
>          Components: C++
>    Affects Versions: 3.0.0
>            Reporter: Ben Kietzman
>            Assignee: Ben Kietzman
>            Priority: Major
>
> ARROW-8919 adds support for execution with implicit casts to any function which overrides DispatchBest, allowing functions to specify conversions which make sense in that function's context. For example "add" can promote its arguments if their types disagree. By contrast, some conversions are more generic and could be applicable to any function's arguments. For example if any datum is dictionary encoded, a kernel which accepts the decoded type should be usable with an implicit decoding cast:
> {code:java}
> import pyarrow as pa
> import pyarrow.compute as pc
> arr = pa.array('hello ' * 10)
> enc = arr.dictionary_encode()
> # result should not depend on encoding:
> assert pc.ascii_is_alnum(arr) == pc.ascii_is_alnum(enc)
> # currently raises:
> # ArrowNotImplementedError: Function ascii_is_alnum has no kernel matching
> #    input types (array[dictionary<values=string, indices=int32, ordered=0>])
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)