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.11.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.11.0-cp38-abi3-win_arm64.whl (33.7 MB view details)

Uploaded CPython 3.8+Windows ARM64

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

Uploaded CPython 3.8+Windows x86-64

sparkless-4.11.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.11.0-cp38-abi3-musllinux_1_2_aarch64.whl (32.7 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

sparkless-4.11.0-cp38-abi3-manylinux_2_28_aarch64.whl (32.7 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.8+macOS 11.0+ ARM64

sparkless-4.11.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.11.0.tar.gz.

File metadata

  • Download URL: sparkless-4.11.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.11.0.tar.gz
Algorithm Hash digest
SHA256 e8dc427ab5e03edc6d81c205e098d3cd3d467ff6a1d897949b52452a165755d5
MD5 978c44baa228bc434a46534779beac44
BLAKE2b-256 4be67db4cbbaa771049b2a34e067ca5a27a126dbdc4aeeb5eb3439c3a3a9cd30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 376e1180a64174db809b3055a48b80a4fd3492dce3ab83c03af756db9cd16f4e
MD5 fbdfe6df03f6d6733be506db280a708f
BLAKE2b-256 81333a1923932a411ea0dc1182b0c1aad2b2caf0f6c30979c393d04651f2b86c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5521c8d6abb26dc05e03af70ff49a03e3c51042c4f7c8cae546dd9ff3fcd538b
MD5 5e8b7d31d777fe7333f1f2648a9527cf
BLAKE2b-256 a9da158c33d8a0071492e647d8bd685ca33105a23c28310bdab9fe4e6844d8c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 69c2bfc4cd982fb35324ae1a048439784872ea53ebc0884fa4ff0d9a62fb38d9
MD5 67c78a58320788331e3326afce934b17
BLAKE2b-256 a894ba08a20f783c0870fdbf6f9688ce080900ea1118d0894f43f03e1d95ec33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 26fa2bc3e31a5d8c6c722f67202c288be327186f37ce6cafd6ad0eb8ac03fce3
MD5 025a1b68a53c19420680de8b3859fe8a
BLAKE2b-256 75b19d70a3fa743f8c433554229bedec4de6a1a4cbe2230d9f6f4419ef45d879

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 13aa0b06a7da295902f9368c0f8dda179201b7db75b027b7a591d850977aa6af
MD5 b222fcd86dc1bb1736262b7df733d509
BLAKE2b-256 b59596664354ddbcb80acdbb6e38dd878eb15e299efa019244cae5928b0c130e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d70dd17b6f24a1761baaf651f24af7d6ba48d224064cb842d64cab36c98716ba
MD5 c53b2a0d7b2ab8901a68855f28fd431d
BLAKE2b-256 2f81de58a2cb01907dc49330e25eec41a4e10744ab6d72fc26b776eb4a144613

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d3cba262189ad15b28ded36f9e8750cca75651e7f96ac2fd07ec2ab9ead3faab
MD5 87e0cf7f20b53daaaa3e9c92e1132455
BLAKE2b-256 287b2fd4f440e1d6768a9d99d0f6401c8412a55f9625f4344ef3c2d7b5f2e3fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for sparkless-4.11.0-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b4cf5e3247851b8682450996e3acbb14bca81b022d47e98145b40d50ad5362b3
MD5 d85d2f82ebcab1d774cc712afa1f59d1
BLAKE2b-256 b179f390e5e84672a77798fbca12e2f7a24ee4c3024196def782e9cd1c9d6e70

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