This client aims for full API parity with the reference PySpark Spark Connect client (pyspark.sql.connect.*) and the shared modules it depends on. The goal is that existing Spark Connect code runs unchanged and gets byte-for-byte identical results. For how this client relates to the pyspark and pyspark-client packages on PyPI - and how to tell which one you have installed - see Which client am I using?.
Apache Spark 4.2.0 and later. The crate and wheel version tracks the Spark release it targets (starting at 4.2.0), so the version number tells you which Spark it speaks.
Two independent gates in CI cover the two halves of a Spark Connect client - plan building and the transport/result path:
spark.connect protobuf plans this client builds (plans, expressions, and every SQL function) match the reference client byte-for-byte. This guards plan-building correctness.dev/design/.Together the two gates cover what the client sends and what it does with what comes back.
Coverage is tracked mechanically. scripts/gen_parity_ledger.py AST-parses the reference PySpark source and emits one row per public class, function, and method into a ledger (dev/parity/inventory.csv), so nothing is silently dropped. The current inventory covers roughly:
| Kind | Count |
|---|---|
| Methods | ~1340 |
| Functions | ~620 |
| Classes | ~300 |
Each row carries a status:
spark-connect / -core / -proto), so a reference-private or generated symbol is not mirrored one-to-one.The ledger is a development tracking tool (kept under dev/parity/); the official test suite is the authoritative gate.
From Python, pyspark-client-rust replaces the pyspark-client package: same import pyspark, same public API, same server - see Installation. Use it exactly like PySpark. The native Rust API mirrors the same surface.