Sparquet
Data engineering as JSON — with a canvas to design it and Spark to run it.
A configuration-driven PySpark framework: describe a pipeline as a JSON document, run it anywhere Spark runs. Then open the same document in Sparquet Studio, a visual, AI-assisted editor for those pipelines.
Two halves · Install · Pipeline in 30 seconds · What the language covers · Docs · Contributing
Two halves of one idea
The framework (sparquet/) |
Reads a JSON pipeline and executes it on Spark: readers and writers for files (Parquet, Delta, Iceberg, CSV, JSON, ORC, Avro, XML, Hudi, text), temp views, Kafka, JDBC databases, warehouses and NoSQL stores; 19 transformations; a validation engine with a data-quality report and row-level quarantine; template parameters, runtime pushdown variables and reusable includes. Runs locally, on Databricks, EMR, Dataproc or Synapse — the session manager detects the environment. |
The studio (sparquet-studio/) |
A browser app that reads and writes exactly those documents on a node canvas, lints them as you type, generates them with an LLM of your choice, and executes them through a local runner. No account, no server, no telemetry. |
The JSON is the contract between them. Studio never invents syntax the framework does not support, and the framework never needs Studio to run.
Install
Framework
pip install sparquet
from sparquet import Sparquet
fw = Sparquet(spark={"app_name": "MyJob", "master": "local[*]"})
result = fw.run("pipeline.json", params={"dt_ref": "2026-01-01"})
print(result.summary())
fw.stop()
Or from the CLI:
sparquet pipeline.json # console script installed with the package
python -m sparquet.cli pipeline.json # same thing, from a checkout
Running locally on Windows? Spark needs a JDK 17 (
JAVA_HOME) and the Hadoop shims (winutils.exe+hadoop.dllin%HADOOP_HOME%\bin) before it can touch the filesystem. With alocalmaster, Sparquet also pinsPYSPARK_PYTHONto the interpreter running the job, so apythononPATHfrom a different install cannot crash the Spark workers — set the variable yourself to override it.
Studio
cd sparquet-studio
npm install
npm run dev # http://localhost:5273
Full instructions, including the AI setup and the local runner, are in the Studio README.
A pipeline in 30 seconds
{
"name": "customers_curated",
"input": { "format": "csv", "path": "/data/landing/customers" },
"transformations": [
{ "type": "filter", "condition": "status = 'active'" },
{ "type": "cast", "columns": { "created_at": "timestamp" } },
{ "type": "with_column", "column": "loaded_at", "expression": "current_timestamp()" },
{ "type": "drop_duplicates", "columns": ["id"] }
],
"validations": {
"on_failure": "warn",
"rules": [
{ "type": "not_null", "columns": ["id"] },
{ "type": "unique", "columns": ["id"] }
],
"report": { "format": "csv", "path": "/dq/customers", "mode": "append" }
},
"output": {
"format": "parquet",
"path": "/data/curated/customers",
"mode": "overwrite",
"partition_by": ["created_at"]
}
}
That file runs as-is, and opens on the Studio canvas as nine connected nodes.
What the language covers
Transformations — filter select drop rename cast with_column struct drop_duplicates distinct sort fill_na sql group_by join (with broadcast map-side hint) union checkpoint stop_if_empty collect debug
IO — files and tables: parquet delta iceberg csv json orc avro xml hudi txt view (binary is read-only); kafka batch read and write; relational via JDBC (postgresql mysql mariadb sqlserver oracle); warehouses (bigquery snowflake redshift); NoSQL/search (mongodb documentdb dynamodb cassandra elasticsearch opensearch). Delta and Iceberg support MERGE upserts and Delta time travel; parquet csv json orc txt view binary delta and iceberg are native, every other connector needs its driver JAR on the Spark classpath.
Validations — powered by sparquet-cola, a standalone data-quality library (pyspark-only) that installs as a dependency (pip install sparquet-cola) and is usable on its own. Rules: not_null unique range regex row_count sql (boolean invariant OR failed_rows mode), plus SODA-style check (a metric vs a warn/fail threshold) and schema (columns and types). fail / warn / skip policies, an optional per-rule metrics report, and row-level quarantine (validations.outputs: split valid/invalid to their own sinks) — all written apart from the main output.
Beyond the basics
- Template parameters
{param}substituted before parsing, with list and boolean formatting for SQL (IN ('a','b')), plusskip_if_falseto switch whole steps on and off per run. - Runtime variables
{{var}}—collecta column into a variable and push it into a later read as a literalIN (...), the declarative form of thecollect()+isin()trick that makes Delta data skipping work. - Multiple destinations with per-destination column projections and per-destination transformations, so one DataFrame can land as Parquet, as a Delta merge and as a Kafka topic in a single pass.
- Includes —
{ "$include": "shared/filters.json" }to share fragments across pipelines. - Extensible — register your own readers, writers, transformations and validators; Studio keeps unknown node types intact when it opens the file.
See CLAUDE.md for the complete schema reference.
Documentation
| Document | What it covers |
|---|---|
| CLAUDE.md | Full JSON schema, API surface and conventions |
| sparquet-studio/README.md | Studio: install, first Job, AI setup, local runner, architecture |
| sparquet-studio/server/README.md | The local execution service, and why it must stay on 127.0.0.1 |
| examples/ | Example pipelines, one per capability |
| docs/TEST_PLAN.md | What the test suite covers, connector by connector, and what is still missing |
| BACKLOG.md | Roadmap: what is planned, and what was deliberately left out |
| CHANGELOG.md | Release history |
| CONTRIBUTING.md | Setup, tests, conventions, how to propose a change |
| SECURITY.md | Supported versions and how to report a vulnerability |
| docs/DEPLOY_PYPI.md | Publishing the framework to PyPI |
| sparquet.dev | The public site: landing plus full documentation in English, Portuguese and Spanish, built from the separate sparquet-web repository |
The data-quality engine is a separate package and repository too:
sparquet-cola, which the framework
declares as a dependency and re-exports under sparquet.validation.*.
Repository layout
sparquet/ the framework (readers, writers, transformations, validations)
sparquet-studio/ the visual editor (React + TypeScript) and its local runner
examples/ example pipelines, one per capability
tests/ unit tests and a full real-world migration case
docs/ documentation index and the PyPI release guide
CLAUDE.md the JSON schema and API reference
BACKLOG.md roadmap
Contributing
Issues and pull requests are welcome, on either half — start with CONTRIBUTING.md for setup, the test commands and the conventions that matter (a new transformation, format or validator needs a Studio catalog entry and an example pipeline; anything that changes the JSON schema starts as an issue). Everyone taking part is expected to follow the Code of Conduct.
License
Apache 2.0 — see LICENSE.
Metadata
Release files for sparquet 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sparquet-0.7.0.tar.gz | 81.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sparquet-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 160.5 kB
Release files / sparquet-0.7.0.tar.gz
| Download URL | sparquet-0.7.0.tar.gz |
|---|---|
| Size | 81.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ce61772922cf1b5f18914ac498487de8ee04b64f65450847097ebf03ae8a7436
|
|
BLAKE2b-256 checksum How to use checksums |
a68ed61fd4faee0bf86d06c9cae02e165c95bbdefadad4848a5907a80ac56fb1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logRelease files / sparquet-0.7.0-py3-none-any.whl
| Download URL | sparquet-0.7.0-py3-none-any.whl |
|---|---|
| Size | 79.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d31eb586d75afc7f87f3d87aa628cab9d5174dad234978f7b23aa17bdf256974
|
|
BLAKE2b-256 checksum How to use checksums |
0a464b2984ab3102a383a1d46bca262a88aa600c1f8420f4c2915b313f6de65e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency log