Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C++] Cast dictionary of extension type to extension type #31015

Closed
asfimport opened this issue Feb 3, 2022 · 1 comment
Closed

[C++] Cast dictionary of extension type to extension type #31015

asfimport opened this issue Feb 3, 2022 · 1 comment

Comments

@asfimport
Copy link
Collaborator

asfimport commented Feb 3, 2022

We support casting a DictionaryArray to its dictionary values' type. For example:

>>> arr = pa.array([1, 2, 1]).dictionary_encode()
>>> arr
<pyarrow.lib.DictionaryArray object at 0x7f0c1aca46d0>

-- dictionary:
  [
    1,
    2
  ]
-- indices:
  [
    0,
    1,
    0
  ]

>>> arr.type
DictionaryType(dictionary<values=int64, indices=int32, ordered=0>)
>>> arr.cast(arr.type.value_type)
<pyarrow.lib.Int64Array object at 0x7f0c19891dc0>
[
  1,
  2,
  1
]

However, if the type of the dictionary values is an ExtensionType, this cast is not supported:

>>> from pyarrow.tests.test_extension_type import UuidType
>>> storage = pa.array([b"0123456789abcdef"], type=pa.binary(16))
>>> arr = pa.ExtensionArray.from_storage(UuidType(), storage)
>>> arr
<pyarrow.lib.ExtensionArray object at 0x7f0c1875bc40>
[
  30313233343536373839616263646566
]
>>> dict_arr = pa.DictionaryArray.from_arrays(pa.array([0, 0], pa.int32()), arr)
>>> dict_arr.type
DictionaryType(dictionary<values=extension<arrow.py_extension_type<UuidType>>, indices=int32, ordered=0>)
>>> dict_arr.cast(UuidType())
...
ArrowNotImplementedError: Unsupported cast from dictionary<values=extension<arrow.py_extension_type<UuidType>>, indices=int32, ordered=0> to extension<arrow.py_extension_type<UuidType>> (no available cast function for target type)
../src/arrow/compute/cast.cc:119  GetCastFunctionInternal(cast_options->to_type, args[0].type().get())

Reporter: Joris Van den Bossche / @jorisvandenbossche
Assignee: Miles Granger / @milesgranger
Watchers: Rok Mihevc / @rok

Related issues:

PRs and other links:

Note: This issue was originally created as ARROW-15545. Please see the migration documentation for further details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants