Spark’s client. Sail’s engine.
Point your Spark session at Sail. The same Spark SQL and DataFrame code runs on a Rust engine, with no JVM.
How it works
Two ways in. One engine.
Both arrive over Spark Connect and become one Sail plan.
How we built the SQL parserdaily = (orders .groupBy("day") .agg(F.sum("amount")))SELECT order_id, itemFROM sales.ordersLATERAL VIEW explode(items) t AS itemSpark Connect
What runs today
Sail runs the Spark code your team depends on.
DataFrame API
Python UDFs
Delta Lake and Iceberg
Catalogs
Full feature lists
Performance
Spark SQL at terabyte scale.
Derived TPC-DS at 1 TB and 3 TB, beside AWS’s Spark results.
All benchmarksTotal time for the query suite, in seconds. Lower is better. Different hardware and methods. Not a controlled head-to-head comparison. Derived from TPC-DS, not officially audited. Sources: LakeSail blog
How we test it
Tested against Spark itself.
Apache Spark’s tests, SQL, and results. Any difference from Spark’s behavior is treated as a bug.
Known differences from SparkSame query, both engines
Run on both, rows compared.
SELECT item, size(amounts) AS n, aggregate(amounts, 0D, (acc, x) -> acc + x) AS totalFROM orders ORDER BY item | item | n | total |
|---|---|---|
| jam | 1 | 9.25 |
| scones | 2 | 21.75 |
| tea | 2 | 16.5 |
| item | n | total |
|---|---|---|
| jam | 1 | 9.25 |
| scones | 2 | 21.75 |
| tea | 2 | 16.5 |
3 of 3 rows identical, same schema. Compare on your own data
Spark’s PySpark tests
On every merge to main.
- pyspark.sql.tests.connect
- doctests: functions, dataframe, column, catalog
SQL from Spark’s test suites
select a, b, sum(c) as c from d group by rollup(a, b)Both acceptSELECT FROM orders WHEREBoth reject
Check your code
Know before you move anything.
Scan a file, a notebook, or a folder of jobs.
- Runs in your browser, or as a CLI.
- A scan reads your code. Compare outputs before you switch.
ls jobs
- PYdaily_orders.py
- PYprice_orders.py
- SQLupsert.sql
spark-to-sail scan ./jobs
[+] 21 supported [!] 0 partial [x] 0 unsupported
21 features detected in 3 files.
Try it locally
Run it on your laptop.
Open source, Apache 2.0.
Download Sail$ pip install pysail $ pip install pyspark-client==4.2.0 $ sail spark server # then, in a second terminal $ python >>> from pyspark.sql import SparkSession >>> spark = SparkSession.builder \ ... .remote("sc://localhost:50051") .getOrCreate()With LakeSail, we can develop and test PySpark code locally far more efficiently – even on Windows. In our environment, it starts up in seconds and processes small data samples almost instantaneously. This helps reduce our test runtimes and streamlines our overall development workflow.

Bring your Spark code to LakeSail.
Scan one file. Run one job.