Skip to main content

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

Sparquet Studio


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.dll in %HADOOP_HOME%\bin) before it can touch the filesystem. With a local master, Sparquet also pins PYSPARK_PYTHON to the interpreter running the job, so a python on PATH from 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')), plus skip_if_false to switch whole steps on and off per run.
  • Runtime variables {{var}} — collect a column into a variable and push it into a later read as a literal IN (...), the declarative form of the collect() + 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.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sparquet 0.8.0
File Size Uploaded
sparquet-0.8.0.tar.gz 84.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sparquet 0.8.0
File Interpreter ABI Platform
sparquet-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 165.0 kB

Release files / sparquet-0.8.0.tar.gz

Download URL sparquet-0.8.0.tar.gz
Size 84.4 kB
Tags Source
SHA-256 checksum
How to use checksums
0a8ca1df67b7c894bb6d76235f82e13d86bf177eabc1ac81aa1ab938d08c14b8
BLAKE2b-256 checksum
How to use checksums
fae4d847431ff29d441a95e08e32846c180af88b5f9a48c32eeeb900c817fd70
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 30, 2026.

Transparency log

Release files / sparquet-0.8.0-py3-none-any.whl

Download URL sparquet-0.8.0-py3-none-any.whl
Size 80.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cf1a4775ad00c86a5f611ad19e518d22be73c0cf66730aeafb7f9eae2b7edef6
BLAKE2b-256 checksum
How to use checksums
53147849216f02303df625ddd0e685cc6e6bb7c673777ddbf53c1e75a3d374e0
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 30, 2026.

Transparency log

Release history Release notifications | RSS feed

0.10.0

2 release files

0.9.0

2 release files

This release

0.8.0 This release

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page