You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 781e980
Browse filesBrowse the repository at this point in the historyBrowse files
docs: add a user-facing extensions page and split distributing-work
The user guide had no page for someone who installs an extension library
and wants to run queries with it. `with_extensions` was described only in
a 123-line docstring and in the contributor-guide FFI page, which opens by
explaining that Rust has no stable ABI — the wrong altitude for a reader
who just wants their queries to run somewhere else.
Adds `user-guide/extensions.md`: what an extension library is, which kinds
register directly versus needing `with_extensions`, the two failure modes
that actually bite (a collected context, a version mismatch), and how to
check what a session was taught. It names no capsule, no ABI, and no codec
id; the only occurrences of `FFI` and `TaskContextProvider` are inside the
error string a reader would be searching for.
Splits `distributing-work.md` into a directory. The page was entirely about
pickling expressions to worker pools and treated query-level distribution
as two stubs at the end, so nothing on the site connected `with_extensions`
to distribution at all — which is the road a data scientist is actually
looking for. The index now asks who owns the partitioning decision and
routes accordingly; `query-engines.md` carries the missing bridge and
absorbs the two upstream work-in-progress sections.
Wires `sphinx-reredirects`, which has been a declared dependency since
#1578 without ever being enabled, so the old `distributing-work.html` URL
keeps working. Also fixes three pointers that went stale in the MyST
migration and still named `.rst` files, a malformed `ref:` role in
udf-and-udfa.md that rendered as literal text, and a doubled "the" in
data-sources.md.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
###Portability requirements for inline Python UDFs
111
+
## Portability requirements for inline Python UDFs
117
112
118
113
Inline Python UDFs ride on [cloudpickle](https://github.com/cloudpipe/cloudpickle), which imposes two
119
114
requirements on the worker environment:
@@ -133,7 +128,7 @@ requirements on the worker environment:
133
128
Self-contained UDFs (no imports beyond what the worker already has,
134
129
e.g. `pyarrow`) avoid this entirely.
135
130
136
-
###Registering shared UDFs on workers
131
+
## Registering shared UDFs on workers
137
132
138
133
When an expression references an FFI capsule UDF (or any UDF the
139
134
worker must resolve from its registered functions), set up the
@@ -164,7 +159,7 @@ fine for expressions that only reference built-ins and Python UDFs,
164
159
but FFI-capsule-backed registrations must be installed on the global
165
160
context to resolve.
166
161
167
-
###Python 3.14 default change
162
+
## Python 3.14 default change
168
163
169
164
Python 3.14 changed the Linux default start method for
170
165
{py:mod}`multiprocessing` from `fork` to `forkserver` (macOS has
@@ -174,7 +169,7 @@ workers via copy-on-write; with `forkserver` and `spawn` it is
174
169
not. The {py:func}`~datafusion.ipc.set_worker_ctx` pattern works on
175
170
every start method — prefer it over relying on inherited state.
176
171
177
-
###Practical considerations
172
+
## Practical considerations
178
173
179
174
-**Serialized size scales with what travels inline.** A serialized
180
175
expression of just built-ins is small (tens of bytes). An
@@ -189,7 +184,7 @@ every start method — prefer it over relying on inherited state.
189
184
the captured state is large, mutable, or not portable to the
190
185
worker's environment. See {ref}`Portability requirements for inline Python UDFs <distributed_udf_portability>` for the Python-version and imported-module rules.
0 commit comments