Skip to main content

PySpark-like DataFrame API in Python—no JVM. Uses robin-sparkless (Rust/Polars) as the execution engine.

Project description

Robin Sparkless

PySpark-style DataFrames in Python—no JVM. Install the sparkless package for a drop-in local PySpark replacement (fast unit tests + CI, no Java/Spark). Under the hood it’s powered by the robin-sparkless Rust engine using Polars for execution.

CI PyPI crates.io docs.rs Documentation License: MIT


Quick start (Python)

# Swap the import—everything else stays the same.
from sparkless.sql import SparkSession, functions as F

spark = SparkSession.builder.app_name("demo").get_or_create()
df = spark.createDataFrame([{"x": 1}, {"x": 2}])
df.filter(F.col("x") > 1).show()

Install from PyPI:

pip install "sparkless>=4,<5"

More Python docs (SQL/temp views, Delta, JDBC, testing plugin): see python/README.md.


Why Sparkless (Python)?

  • Familiar APISparkSession, DataFrame, Column, and PySpark-like functions so you can reuse patterns without the JVM.
  • Fast local execution — Runs natively (no JVM) and uses Polars for IO, expressions, and aggregations.
  • Test the same suite two ways — Use sparkless.testing to run tests with Sparkless (fast) or real PySpark (parity checks).
  • Optional “Spark-like” features — SQL, temp/global temp views, saveAsTable, Delta, and JDBC (see python/README.md).

Features (Python surface)

Area What’s included
Core SparkSession, DataFrame, Column, functions
IO CSV, Parquet, JSON, Delta
Expressions col, lit, when/otherwise, casts, null handling
Aggregates count, sum, avg, min, max, groupBy().agg()
Window row_number, rank, dense_rank, lag, lead, first_value, last_value via .over()
Arrays, strings, JSON Common PySpark functions (explode, regexp_*, get_json_object, from_json, to_json, …)
SQL + views spark.sql, temp/global temp views, saveAsTable, catalog().listTables()
JDBC Read/write via spark.read.jdbc(...) / df.write.jdbc(...)

Parity: 200+ fixtures validated against PySpark. Known differences: docs/PYSPARK_DIFFERENCES.md. Full parity status: docs/PARITY_STATUS.md. Out-of-scope items: docs/DEFERRED_SCOPE.md.


Installation

Python (sparkless v4)

Install from PyPI:

pip install "sparkless>=4,<5"

Or from this repo:

pip install ./python

See python/README.md for usage and development (including maturin develop).

Rust engine (optional)

Most users should use the Python package above. If you want to embed the engine directly in Rust, depend on robin-sparkless.

Add to your Cargo.toml:

[dependencies]
robin-sparkless = "4"

Optional features:

robin-sparkless = { version = "4", features = ["sql"] }      # spark.sql(), temp views
robin-sparkless = { version = "4", features = ["delta"] }    # Delta Lake read/write
robin-sparkless = { version = "4", features = ["jdbc"] }     # PostgreSQL JDBC
robin-sparkless = { version = "4", features = ["sqlite"] }   # SQLite JDBC
robin-sparkless = { version = "4", features = ["jdbc_mysql"] } # MySQL/MariaDB JDBC

Development

If you’re working on the Python package, start in python/README.md (it covers maturin develop, pytest, and dual-mode testing).

If you’re working on the Rust engine crates, see docs/QUICKSTART.md and the crate READMEs in crates/.

This repository contains:

  • python/: the sparkless Python package (v4)
  • Rust crates: the robin-sparkless engine (Cargo workspace)
Command Description
pip install ./python Install the Python package from this repo
cd python && maturin develop Editable install for Python development
pytest tests/ -v Run Python tests (sparkless backend)
SPARKLESS_TEST_MODE=pyspark pytest tests/ -v Run the same tests against real PySpark
scripts/typecheck_strict.sh Strict mypy for the Python sparkless package
make check Rust engine: format, clippy, audit/deny, Rust tests
make test-parity-phases Run PySpark parity fixtures (Rust engine)

CI runs format, clippy, audit, deny, Rust tests, and parity tests on push/PR (see .github/workflows/ci.yml).


Documentation

Resource Description
Python package Sparkless v4 — install from PyPI (pip install sparkless) or pip install ./python, quick start, Sparkless 3 vs 4.x, API overview
Read the Docs Full docs: quickstart, Rust usage, Python getting started, Sparkless integration (MkDocs)
docs.rs Rust API reference
QUICKSTART Build, usage, optional features, benchmarks
User Guide Everyday usage (Rust)
Persistence Guide Global temp views, disk-backed saveAsTable
UDF Guide Scalar, vectorized, and grouped UDFs
Testing Guide Dual-mode testing with sparkless.testing
PySpark Differences Known divergences
Roadmap Development phases, Sparkless integration
RELEASING Publishing to crates.io and PyPI

See CHANGELOG.md for version history.


License

MIT

Project details


Download files

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

Source Distribution

sparkless-4.9.0.tar.gz (20.7 MB view details)

Uploaded Source

Built Distributions

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

sparkless-4.9.0-cp38-abi3-win_arm64.whl (33.7 MB view details)

Uploaded CPython 3.8+Windows ARM64

sparkless-4.9.0-cp38-abi3-win_amd64.whl (36.7 MB view details)

Uploaded CPython 3.8+Windows x86-64

sparkless-4.9.0-cp38-abi3-musllinux_1_2_x86_64.whl (34.8 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ x86-64

sparkless-4.9.0-cp38-abi3-musllinux_1_2_aarch64.whl (32.6 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

sparkless-4.9.0-cp38-abi3-manylinux_2_28_aarch64.whl (32.6 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ ARM64

sparkless-4.9.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.8 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

sparkless-4.9.0-cp38-abi3-macosx_11_0_arm64.whl (31.2 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

sparkless-4.9.0-cp38-abi3-macosx_10_12_x86_64.whl (33.2 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file sparkless-4.9.0.tar.gz.

File metadata

  • Download URL: sparkless-4.9.0.tar.gz
  • Upload date:
  • Size: 20.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for sparkless-4.9.0.tar.gz
Algorithm Hash digest
SHA256 d410d5ecfdcd0f847552d0dd67b181d073d8e85e6ad961241a217ed79c79935d
MD5 cb0bebcd3bec460ada6883fa7e3286e7
BLAKE2b-256 438e3af58df02d66cf2c19ad5735d8970acb90acc820436136a270e8c8950ec4

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-win_arm64.whl.

File metadata

  • Download URL: sparkless-4.9.0-cp38-abi3-win_arm64.whl
  • Upload date:
  • Size: 33.7 MB
  • Tags: CPython 3.8+, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 3f38ed36ce057ba6e876adf2b988be7db49bf8d1bca7a9d49481d39be6500973
MD5 c50540f699906baae45c5913f8ee95af
BLAKE2b-256 2c38c0bef152bc4ea70893b230a89fdc6b03aefd9cc8d0dfd5db22b6f58a3354

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: sparkless-4.9.0-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 36.7 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2fda4785ac00cc804f0562ea33eb47e959c642f32a6c0737ebfd3ab01af6d747
MD5 67b08146f1ad9384efd523d0d7586ef5
BLAKE2b-256 a38078d642826766fb4227a1cc1069f756f03ef49242dde8876c9f1be4addfe9

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 665ea27725819effda3c106c18edd60da30eb02e6bf11ca8f04e3557a06859b5
MD5 5d9d88fc65fecf8ee2f3319dceabc831
BLAKE2b-256 50ef1ed087c8ccc0ff46a11f9219567cdab9e42f8a820a515c5742d5b8c2a006

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b1bc572743be239915bf59c359968dfc748935752642c8e918d7bdd3a1a376be
MD5 d8034e1c345439190199fec6cc9fc36d
BLAKE2b-256 a257dafa158981561540000f9e391d7eeee9e411c036c6a5f4f7b847786bc5b8

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d07309310a6255b5df9337d7bec3445b4903514baa549c408c917ed38f1bd190
MD5 5fe5f0a40b0b623eafa4b29e6b0c9ee6
BLAKE2b-256 107b705d1d4e73d231728ebd94bdc942c5aeaca8b9f99fcec09d73926db16e97

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 224c1fda6f80bd551e648a9784b7ac634bf872ef13b6b29b7c59c2c8905e0b6d
MD5 d53e70161efde80d45262a1ffd70d332
BLAKE2b-256 99d3c724011129ece41bc1a8647b2446a2e7e6a043365dda092d242205da31bc

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6b9b993a673b2346a473dd186e8b48c28420d75988b9e62517c95a24a5a9be0
MD5 3021b83142f3ec8a75c6f79f25e60fce
BLAKE2b-256 1975d921409bc74d3de5eecee300e38e5310234e7a3d2cbe4c723a65b1a91ea7

See more details on using hashes here.

File details

Details for the file sparkless-4.9.0-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sparkless-4.9.0-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 813cb74b5411ca9791ec8164b7d7cd47bece9da9aba774cbb14a2a75f26521b8
MD5 d865b190ae1cb6983953b17a65c12069
BLAKE2b-256 7e88c392e7c31d35c1fbc7b6b70caf0d26dcf27a537e7040d17268d177437a61

See more details on using hashes here.

Supported by

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