-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Is your feature request related to a problem or challenge? Please describe what you are trying to do.
I want to compare two ArrayRefs (Arc<Array>) with each other
Arrow offers compute kernels for primitive (numeric) types(e.g. eq), and separate ones for string types (e.g. eq_utf8).
https://docs.rs/arrow/6.0.0/arrow/compute/kernels/comparison/index.html
This means I have to match on the datatype and then dispatch to the appropriate implementation
You can see a bunch of this kind of dispatch (encoded in macros) in Datafusion, for example https://github.com/apache/arrow-datafusion/blob/81fae230b81b97e93bbb95b284cfda6f4d59552e/datafusion/src/physical_plan/expressions/binary.rs#L289-L328
Describe the solution you'd like
Add functions like OP_dyn that did the type dispatch within arrow
So for example, a function like this:
/// Compare the left and right arrays for equality. Returns an error if they are not the exact same type
fn eq_dyn(left: &dyn Array, right: &dyn Array) -> result<BooleanArray> {
// switch on types and call appropriate eq kernel
...
}and neq_dyn, lt_dyn, etc.
Describe alternatives you've considered
Leave it as is
Additional context
See also apache/datafusion#1163 and #842