Skip to content

feat(python/sedonadb): Enable GPU feature in python package and add spatial join tests#768

Merged
paleolimbot merged 2 commits into
apache:mainfrom
pwrliang:feat/gpu-python
Apr 17, 2026
Merged

feat(python/sedonadb): Enable GPU feature in python package and add spatial join tests#768
paleolimbot merged 2 commits into
apache:mainfrom
pwrliang:feat/gpu-python

Conversation

@pwrliang
Copy link
Copy Markdown
Contributor

We’ll eventually need a CI server with a GPU if we want to get serious about GPU support @jiayuasu @paleolimbot . Test results from my server are included below:

Note that this PR depends on #766, or the GPU join might not trigger correctly.

(sedona) ubuntu@ip-172-31-42-84:/mnt/data/sedona-db/python/sedonadb$ python -m pytest tests/test_sjoin_gpu.py -vv -s
================================================================================================ test session starts =================================================================================================
platform linux -- Python 3.11.14, pytest-9.0.2, pluggy-1.6.0 -- /home/ubuntu/miniconda3/envs/sedona/bin/python
cachedir: .pytest_cache
rootdir: /mnt/data/sedona-db/python/sedonadb
configfile: pyproject.toml
plugins: anyio-4.12.1
collected 28 items

tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-INNER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-LEFT OUTER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-RIGHT OUTER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-INNER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-LEFT OUTER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-RIGHT OUTER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Contains(sjoin_polygon.geometry, sjoin_point.geometry)-INNER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Contains(sjoin_polygon.geometry, sjoin_point.geometry)-LEFT OUTER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_gpu[ST_Contains(sjoin_polygon.geometry, sjoin_point.geometry)-RIGHT OUTER JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_reordering_can_be_disabled_e2e_gpu PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-LEFT SEMI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-LEFT ANTI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-RIGHT SEMI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-RIGHT ANTI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-LEFT SEMI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-LEFT ANTI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-RIGHT SEMI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-RIGHT ANTI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Contains(sjoin_polygon.geometry, sjoin_point.geometry)-LEFT SEMI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Contains(sjoin_polygon.geometry, sjoin_point.geometry)-LEFT ANTI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Contains(sjoin_polygon.geometry, sjoin_point.geometry)-RIGHT SEMI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_join_semi_anti_gpu[ST_Contains(sjoin_polygon.geometry, sjoin_point.geometry)-RIGHT ANTI JOIN] PASSED
tests/test_sjoin_gpu.py::test_spatial_mark_join_via_correlated_exists_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-point] PASSED
tests/test_sjoin_gpu.py::test_spatial_mark_join_via_correlated_exists_gpu[ST_Intersects(sjoin_point.geometry, sjoin_polygon.geometry)-polygon] PASSED
tests/test_sjoin_gpu.py::test_spatial_mark_join_via_correlated_exists_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-point] PASSED
tests/test_sjoin_gpu.py::test_spatial_mark_join_via_correlated_exists_gpu[ST_Within(sjoin_point.geometry, sjoin_polygon.geometry)-polygon] PASSED
tests/test_sjoin_gpu.py::test_query_window_in_subquery_gpu PASSED
tests/test_sjoin_gpu.py::test_spatial_join_with_pandas_metadata_gpu PASSED

@github-actions github-actions Bot requested a review from paleolimbot April 16, 2026 13:06
@paleolimbot
Copy link
Copy Markdown
Member

@jiayuasu For Arrow we use https://runs-on.com/ for GPU runner support. I did think we already had this for our rust GPU jobs?

https://github.com/apache/arrow-nanoarrow/blob/main/.github/workflows/build-and-test-device.yaml#L53

Copy link
Copy Markdown
Member

@paleolimbot paleolimbot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! A few suggestions for tests that I don't think apply to the gpu join, and I think it would probably be good to add the __features__ while we're here, since this is a very cool one!

Comment thread python/sedonadb/tests/test_sjoin_gpu.py
Comment thread python/sedonadb/tests/test_sjoin_gpu.py Outdated
Comment thread python/sedonadb/tests/test_sjoin_gpu.py Outdated
Comment thread python/sedonadb/tests/test_sjoin_gpu.py Outdated
Copy link
Copy Markdown
Member

@paleolimbot paleolimbot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@paleolimbot paleolimbot merged commit a991238 into apache:main Apr 17, 2026
5 checks passed
@pwrliang pwrliang deleted the feat/gpu-python branch April 20, 2026 07:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants