If most of your jobs are small PySpark and Spark SQL workloads, you have three kinds of option. Stay on Databricks and move jobs to cheaper compute, move the same code to a serverless Spark service such as EMR Serverless, Dataproc Serverless or AWS Glue, or run it on a Spark Connect engine such as Databasin Sail that keeps the PySpark API but scales workers to zero. Rewriting small jobs for DuckDB or Polars saves the most, but it is a rewrite.
Quick picks
| Option | Best for | Code changes |
|---|---|---|
| Databricks jobs and serverless compute | Keeping Databricks and paying less per job | None; job configuration only |
| Amazon EMR Serverless | Teams on AWS with batch Spark jobs | Packaging and job submission |
| Google Dataproc Serverless | Teams on Google Cloud with batch Spark jobs | Packaging and job submission |
| AWS Glue | ETL jobs that fit Glue's managed Spark runtime | Glue job setup; optional Glue APIs |
| Spark on Kubernetes | Platform teams that already run Kubernetes | Images, scheduling and operations |
| Databasin Sail | PySpark DataFrames and Spark SQL on an Azure lakehouse | Connection string; check compatibility |
| DuckDB or Polars | Jobs that fit on one machine | A rewrite off the Spark API |
How these options were selected
The guide assumes the code already exists and works. It weighs how much of that code survives the move, what the bill depends on afterwards, and who has to run the result. Raw speed was not a criterion: for small jobs, start-up time and idle cost usually matter more than throughput.
Code that carries over unchanged
35%
Cost for small and idle workloads
30%
Operations the team must take on
20%
Governance and BI on the same data
15%
Databricks · Compute · Accessed 2026
AWS · Amazon EMR Serverless · Accessed 2026
Google Cloud · Dataproc Serverless · Accessed 2026
AWS · AWS Glue · Accessed 2026
Apache Spark · Running Spark on Kubernetes · Accessed 2026
LakeSail · Sail · Accessed 2026
Databasin · Spark compatibility and clusters and sizes · 2026
What happens next
Bring a job your team runs every day. We can check its functions against Sail's compatibility list and run it with you on your own data.
What happens next
Book a demo
Tell us which jobs drive the bill and where they run today.
Check one job
We review its functions against the compatibility list and run it on Sail.
Plan the move
Decide which jobs move, which stay and how the tables are shared.
FAQ
Will my PySpark code run unchanged?
Plain DataFrame and Spark SQL code usually does on any open-source Spark runtime and on Spark Connect engines. Code that uses Databricks utilities, notebook magic, RDDs, Scala or Spark ML needs changes or a different target. Check each job's imports before choosing.
Is a rewrite to DuckDB worth it?
For a job that processes a few gigabytes on a schedule, often yes. For jobs that share tables with BI and other engines, or that may grow, keeping the Spark API avoids a second migration later.
Do I lose Unity Catalog if I move?
Its access rules and lineage stay in Databricks. Sail can read Unity Catalog Delta tables in place (in preview), and other options need their own catalog. Decide where governance lives before moving jobs.
Can I move only some jobs?
Yes. Open table formats let several engines read the same tables. Many teams keep heavy or ML workloads on Databricks and move small scheduled jobs elsewhere.
Bring a slow or costly job
We can look at the jobs behind your Databricks bill and test one on Sail with your team.