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.10.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.10.0-cp38-abi3-win_arm64.whl (33.8 MB view details)

Uploaded CPython 3.8+Windows ARM64

sparkless-4.10.0-cp38-abi3-win_amd64.whl (36.8 MB view details)

Uploaded CPython 3.8+Windows x86-64

sparkless-4.10.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.10.0-cp38-abi3-musllinux_1_2_aarch64.whl (32.6 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.8+manylinux: glibc 2.28+ ARM64

sparkless-4.10.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.10.0-cp38-abi3-macosx_11_0_arm64.whl (31.2 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

sparkless-4.10.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.10.0.tar.gz.

File metadata

  • Download URL: sparkless-4.10.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.10.0.tar.gz
Algorithm Hash digest
SHA256 98759630f1b202b8e2fefa7a15c12fb66c408bc33064f10551dc7762fedf0c63
MD5 ab2fb9ebf286f9b809828f2326b95db2
BLAKE2b-256 d32a6d3ec0d8d0c7d7eb8fe510c999281a8752541e7c90cfb560beab3802c144

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 025e8e36a796df0be7b4678ae4319e0bd42895382cdf6ee7330ee54cb23b40fa
MD5 73a398f5de3a3c6fb138a3c3bfc37df4
BLAKE2b-256 2d8bed1a7affbe837fac8f23fb2d5c0e271f66756f4dc6d61766ee14a2966897

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 89e65c41de8e6e9c88998c2b5616b42bf13f94556d7b43f48d7664ea14fe7eb5
MD5 82e56cb6054109e3944975f6e6006e67
BLAKE2b-256 a060a3412dcf5dbc15929242a0bae3b504cf6ea1d454d2ce2906736089a3f38b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ab7c723e51947133876184c6ca9ad431b5c8dce23cf1cbcbb5e7c6f6ca0f5558
MD5 fd8a6f7a7e32bf81d11156d2695edecf
BLAKE2b-256 82c8bc30b7c3b0e7f7c4147a209d5bb0777cc9a9786bd4523bd248444784145e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e32d0e7af5e6646e05b4d2432dc7ea89a6e5bc95448e6a56c5b9702c491131e0
MD5 b63e6925e3233342f8ed208a0c75f2cc
BLAKE2b-256 c24985cef1cf6201c4adace6a7e7ce9e1f25851af876ee2dfb4bfb6f16ceb5dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6f558f59c376a6399a80d49a20f8121bd08f201493a927b6be3bed545e8e3729
MD5 f4aea255446ed21ba25ef29d6cdd8318
BLAKE2b-256 8e83c983fb660d468c26ffd8aafe502ed0cbe6849a2fbeeaefd188adb9c88444

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b581772365b941969cae4dde40dbc4872f1a15f31c240bd842fdc55ae00e0eed
MD5 5ab799bbcfb32bb5438c704f49e5c459
BLAKE2b-256 c0571a4f528ad5d279f521b5e4d4dea93643cc2fcd0e4769af43e3ac610427d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e7ea9fc843b685348dc0cf4c96ce354e72418345e015aee5d06265affcc3e64a
MD5 5eba46be98459fe392ac01438c1e7f69
BLAKE2b-256 6c35f190309a4db2c17e1bf6e274c1ac0496c9495c0af4d638674b46b52e1560

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.10.0-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3a2e6d17bda15410959d87c4749d37f69d9a511348219c88a8bd1914506acd29
MD5 65fdf17dad365a67d76be52cc0cbdcec
BLAKE2b-256 bb9137a896fa32295bb4979a3aea545546d58954aee63e5e20766a8095931390

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