Run locally, end to end
This page takes a machine with nothing installed and ends with a pipeline you built on the canvas, executed against real Spark, showing its result. It ties together the install and running a job pages into one ordered path — follow it top to bottom the first time.
The pieces you install:
- Java (JDK 17) — Spark runs on the JVM.
- Python + Sparquet + PySpark — the framework and its engine.
- The Hadoop shims — only on Windows, and the single most common reason a first run hangs.
- Sparquet Studio — the browser app where you design.
- The local runner — the small service that lets Studio execute against your Spark.
1. Java (JDK 17)
Section titled “1. Java (JDK 17)”Spark needs a JDK and JAVA_HOME pointing at it. JDK 17 works for both Spark 3.5 and Spark 4 (Java 11 also works for Spark 3.x).
brew install openjdk@17export JAVA_HOME="$(/usr/libexec/java_home -v 17)"sudo apt-get install -y openjdk-17-jdk # Debian/Ubuntuexport JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64Install Temurin 17 (Adoptium) or another OpenJDK 17, then set JAVA_HOME:
setx JAVA_HOME "C:\Program Files\Eclipse Adoptium\jdk-17"Open a new terminal so the variable takes effect.
Verify — the version must be 17 and JAVA_HOME must be set:
java -versionecho $JAVA_HOME # PowerShell: echo $env:JAVA_HOME2. Python, Sparquet and PySpark
Section titled “2. Python, Sparquet and PySpark”Sparquet needs Python 3.9+; PySpark comes along as a dependency. Use a virtual environment so the install stays isolated.
python3 -m venv .venvsource .venv/bin/activatepip install sparquet pysparkpython -m venv .venv.\.venv\Scripts\Activate.ps1pip install sparquet pysparkgit clone https://github.com/VictorPasqualini/sparquet.gitcd sparquetpip install -e . pysparkFor Delta Lake tables outside Databricks, add the extra: pip install "sparquet[delta]".
Verify the import resolves:
from sparquet import Sparquetprint(Sparquet)3. Windows only — the Hadoop shims
Section titled “3. Windows only — the Hadoop shims”-
Download
winutils.exeandhadoop.dllmatching your Hadoop version (the one PySpark bundled). -
Put both in
C:\hadoop\bin. -
Set
HADOOP_HOMEand add itsbintoPATH:Terminal window setx HADOOP_HOME "C:\hadoop"setx PATH "$env:PATH;C:\hadoop\bin" -
Open a new terminal so the variables apply.
WSL2 or Docker sidesteps this entirely — inside a Linux environment there is nothing extra to install.
4. Confirm Spark works
Section titled “4. Confirm Spark works”Before wiring up Studio, prove the runtime end to end. Create a one-line CSV to read:
printf 'id,amount\n1,10\n2,20\n' > orders.csvSave this pipeline as hello.json:
{ "name": "hello_local", "input": { "format": "csv", "path": "orders.csv" }, "transformations": [ { "type": "filter", "condition": "amount > 0" } ], "output": { "format": "csv", "path": "./out/hello", "mode": "overwrite" }}Run it through the CLI:
python -m sparquet.cli hello.jsonIf it prints a structured result ending in a written row count and leaves part
files under ./out/hello, your Java + PySpark + (on Windows) Hadoop setup is
correct and Studio’s runner will work too.
5. Sparquet Studio
Section titled “5. Sparquet Studio”Studio is a static browser app; designing needs no server.
-
Clone and install:
Terminal window git clone https://github.com/VictorPasqualini/sparquet.gitcd sparquet/sparquet-studionpm install -
Start the dev server:
Terminal window npm run dev -
Open http://localhost:5273. The first launch seeds a Getting Started Workflow with working Jobs.
Node.js 18.18+ is required for this step only.
6. The local runner
Section titled “6. The local runner”Designing works offline. Executing from the canvas needs Spark, so Studio talks to a small FastAPI service you run yourself against the same Python environment from step 2.
-
Install its dependencies:
Terminal window cd sparquet-studiopip install -r server/requirements.txt -
Start it from the
sparquet-studiodirectory — the module inserts the repository root intosys.path, sosparquetresolves even without installing the package:Terminal window uvicorn server.main:app --port 8787It binds
127.0.0.1by default. Keep it there — never expose it to a network. -
Copy the token it prints on startup:
========================================================================Sparquet Studio runner token (this session only):S3yhI-6191J6wu2xz7bCX9YpafB0GOLo======================================================================== -
Paste it into Settings → Local runner → Runner token in Studio (or into the card the Run panel shows the first time a run is refused).
The token changes on every restart. To pin it, set SPARQUET_STUDIO_TOKEN before starting:
SPARQUET_STUDIO_TOKEN=my-local-token uvicorn server.main:app --port 8787$env:SPARQUET_STUDIO_TOKEN = "my-local-token"; uvicorn server.main:app --port 8787The same Windows rule applies to the runner: without winutils.exe and HADOOP_HOME (step 3), a /run never finishes. GET /health reports spark_available from the import alone, so it can read ok on a machine where a real run still cannot write files.
7. Build and run a pipeline
Section titled “7. Build and run a pipeline”- In Studio, drag an input node onto the canvas and point it at a source you can read locally — a CSV or Parquet path, for instance.
- Add a transformation or two (a
filter, awith_column), then an output node writing somewhere local. - Open the Run panel with Ctrl/⌘+Enter.
- Press Run pipeline. Studio compiles the canvas to the same JSON the framework runs, and posts it to the runner.
8. Read the result
Section titled “8. Read the result”The Run panel reports everything the run produced:
| Section | What it tells you |
|---|---|
| Status | success, skipped (a stop_if_empty fired) or error, with the message |
| Metrics | rows read, rows written, duration |
| Validations | one row per rule: passed, failed count, message |
| Preview | up to 50 rows of the output DataFrame |
| Logs | the framework’s own structured records for this run |
A skipped run is not a failure — stop_if_empty ended it because there was nothing to process.
- The full run flow, endpoints and troubleshooting: Running a job.
- Write a pipeline by hand instead: Your first pipeline.
- What every node compiles to: the pipeline reference.