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.

Framework · Studio · Install · Pipeline in 30 seconds · What the language covers · Docs

Sparquet Studio


Two halves of one idea

The framework (sparquet/) Reads a JSON pipeline and executes it on Spark: readers and writers for Parquet, Delta, Iceberg, CSV, text, temp views and Kafka; 20 transformations; a validation engine with a data-quality report; 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:

python -m sparquet.cli pipeline.json

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

Transformationsfilter 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

IOparquet delta iceberg csv txt view kafka read and write; relational via JDBC (postgresql mysql mariadb sqlserver oracle); warehouses (bigquery snowflake redshift); NoSQL/search (mongodb documentdb dynamodb cassandra elasticsearch). Delta and Iceberg support MERGE upserts and Delta time travel; external connectors need their 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 pipeline, AI setup, local runner, architecture
sparquet-studio/server/README.md The local execution service
docs/DEPLOY_PYPI.md Publishing the framework to PyPI
ROADMAP.md Framework roadmap
ROADMAP_CASE_OF_SUCCESS.md A real migration: Spark jobs rewritten as declarative configs
examples/ Runnable example pipelines
website/ The public site: landing plus full documentation in English, Portuguese and Spanish

Repository layout

sparquet/        the framework (readers, writers, transformations, validations)
sparquet-studio/        the visual editor (React + TypeScript) and its local runner
website/                landing page and documentation site (Astro + Starlight)
examples/               example pipelines, one per capability
tests/                  unit tests and a full real-world migration case
docs/                   deployment and reference docs

Contributing

Issues and pull requests are welcome, on either half. For Studio, keep npm run typecheck, npm run test and npm run lint clean and run npm run smoke when touching the canvas. For the framework, add an example pipeline covering any new capability.

License

Apache 2.0 — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sparquet-0.3.0.tar.gz (47.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sparquet-0.3.0-py3-none-any.whl (61.0 kB view details)

Uploaded Python 3

File details

Details for the file sparquet-0.3.0.tar.gz.

File metadata

  • Download URL: sparquet-0.3.0.tar.gz
  • Upload date:
  • Size: 47.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sparquet-0.3.0.tar.gz
Algorithm Hash digest
SHA256 b5a63e27bd06082864df0c616c21880949a0ab23cacef7d851c2c406143a70b3
MD5 5edbcc42944b722bb28572c8e2d67aa8
BLAKE2b-256 189fab7b90393831bc89046ab04366b668c6ae541fc58bbe09501e44d999b9a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for sparquet-0.3.0.tar.gz:

Publisher: publish.yml on VictorPasqualini/sparquet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sparquet-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: sparquet-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 61.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sparquet-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 182f7f59cbf02207f356b19a7a2f425a404575edba3dd3d01483852b30882640
MD5 00492588b9cc59562b61bac935126f2f
BLAKE2b-256 069f57d4e7d41a131e2aee7d247aedc22c1407472e9f64db85424acc97be3d0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sparquet-0.3.0-py3-none-any.whl:

Publisher: publish.yml on VictorPasqualini/sparquet

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page