You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by gu...@apache.org on 2026/08/25 04:00:21 UTC

(spark-connect-rust) 01/01: [SPARK-58983] Run the WASM packer against the reference pyspark in CI

This is an automated email from the ASF dual-hosted git repository.

HyukjinKwon pushed a commit to branch fix-ci-actions
in repository https://gitbox.apache.org/repos/asf/spark-connect-rust.git

commit 8bfb59f6ba408b853bd83f7afd3047ae78079a79
Author: Hyukjin Kwon <hy...@databricks.com>
AuthorDate: Tue Aug 25 13:00:06 2026 +0900

    [SPARK-58983] Run the WASM packer against the reference pyspark in CI
    
    The `wasm-udf` job's "Packer end-to-end" step pointed
    SPARK_CONNECT_WASM_PACKER_PATH at ./python, which put the Rust-backed
    `pyspark` skin on the packer's import path. `pyspark_wasm_udf.pack` needs
    `pyspark.cloudpickle` and `pyspark.sql.types._parse_datatype_json_value`,
    and must emit a reference `DataType` that executors unpickle -- none of
    which the skin provides. Isolate `pyspark_wasm_udf` in a `.packer` dir so
    `import pyspark` resolves to the reference pyspark installed earlier in
    the job. Also refresh the pack.py docstring to say we use the reference
    `pyspark.cloudpickle`.
    
    Co-authored-by: Isaac <no...@databricks.com>
---
 .github/workflows/rust.yml      | 13 +++++++++++--
 python/pyspark_wasm_udf/pack.py |  8 ++++----
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index d693d59..8d22123 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -122,6 +122,15 @@ jobs:
           cargo build -p examples --bin wasm_udf_macro --features examples/wasm-udf-macro
 
       - name: Packer end-to-end (Rust -> cloudpickle command)
+        # The packer runs `python -m pyspark_wasm_udf.pack`, which imports the
+        # reference `pyspark` (installed above) for `pyspark.cloudpickle` and
+        # `pyspark.sql.types._parse_datatype_json_value`, and produces a
+        # reference `DataType` the executors unpickle. Put *only* the
+        # `pyspark_wasm_udf` package on the packer path (not ./python, whose
+        # `pyspark` skin is Rust-backed and would shadow the reference).
         env:
-          SPARK_CONNECT_WASM_PACKER_PATH: ${{ github.workspace }}/python
-        run: cargo test -p apache-spark-connect --features wasm-udf -- --ignored packer_produces
+          SPARK_CONNECT_WASM_PACKER_PATH: ${{ github.workspace }}/.packer
+        run: |
+          mkdir -p .packer
+          cp -r python/pyspark_wasm_udf .packer/
+          cargo test -p apache-spark-connect --features wasm-udf -- --ignored packer_produces
diff --git a/python/pyspark_wasm_udf/pack.py b/python/pyspark_wasm_udf/pack.py
index 9b3c305..a38a7cb 100644
--- a/python/pyspark_wasm_udf/pack.py
+++ b/python/pyspark_wasm_udf/pack.py
@@ -35,10 +35,10 @@ generically with :func:`pyspark.sql.types._parse_datatype_json_value`, so any
 Spark type is supported without a token table.
 
 The command mirrors ``pyspark.sql.connect.expressions.PythonUDF``:
-``cloudpickle.dumps((func, output_type))``. We use the standalone PyPI
-``cloudpickle`` (byte-for-byte the same as ``pyspark.cloudpickle``) and register
-:mod:`pyspark_wasm_udf` for pickling **by value**, so executors need not have
-this package installed.
+``cloudpickle.dumps((func, output_type))``. We use the bundled
+``pyspark.cloudpickle`` (the same cloudpickle the reference client ships) and
+register :mod:`pyspark_wasm_udf` for pickling **by value**, so executors need not
+have this package installed.
 """
 
 import base64


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org