Skip to main content

A declarative PySpark framework for row- and aggregate-level data quality validation.

Project description

CI Pipeline codecov Docs PyPI version Python Versions License: Apache-2.0

SparkDQ — Data Quality Validation for Apache Spark

Most data quality frameworks weren’t designed with PySpark in mind. They aren’t Spark-native and often lack proper support for declarative pipelines. Instead of integrating seamlessly, they require you to build custom wrappers around them just to fit into production workflows. This adds complexity and makes your pipelines harder to maintain. On top of that, many frameworks only validate data after processing — so you can’t react dynamically or fail early when data issues occur.

SparkDQ takes a different approach. It’s built specifically for PySpark — so you can define and run data quality checks directly inside your Spark pipelines, using Python. Whether you're validating incoming data, verifying outputs before persistence, or enforcing assumptions in your dataflow: SparkDQ helps you catch issues early, without adding complexity.

🚀 See the official documentation to learn more.

Quickstart Examples

Define checks as dictionaries that can be loaded from YAML/JSON files, stored in databases, or generated by APIs — perfect for CI/CD pipelines and data contracts.

from pyspark.sql import SparkSession

from sparkdq.engine import BatchDQEngine
from sparkdq.management import CheckSet

spark = SparkSession.builder.getOrCreate()

df = spark.createDataFrame(
    [
        {"id": 1, "name": "Alice"},
        {"id": 2, "name": None},
        {"id": 3, "name": "Bob"},
    ]
)

# Declarative configuration via dictionary
# Could be loaded from YAML, JSON, or any external system
check_definitions = [
    {"check-id": "my-null-check", "check": "null-check", "columns": ["name"]},
]
check_set = CheckSet()
check_set.add_checks_from_dicts(check_definitions)

result = BatchDQEngine(check_set).run_batch(df)
print(result.summary())

Prefer Python-native development? Alternatively, you can define checks using Python classes for full type safety, IDE autocompletion, and compile-time validation. See docs for examples of both approaches.

Installation

For Local Development / Standalone Clusters

Install with PySpark included:

pip install sparkdq[spark]

For Databricks / Managed Platforms

Install without PySpark (runtime provided by platform):

pip install sparkdq

The framework supports Python 3.10+ and is fully tested with PySpark 3.5.x. SparkDQ will automatically check for PySpark availability on import and provide clear error messages if PySpark is missing in your environment.

Why SparkDQ?

  • Robust Validation Layer: Clean separation of check definition, execution, and reporting

  • Declarative or Programmatic: Define checks via config files or directly in Python

  • Severity-Aware: Built-in distinction between warning and critical violations

  • Row & Aggregate Logic: Supports both record-level and dataset-wide constraints

  • Typed & Tested: Built with type safety, testability, and extensibility in mind

  • Zero Overhead: Pure PySpark, no heavy dependencies

Typical Use Cases

SparkDQ is built for modern data platforms that demand trust, transparency, and resilience. It helps teams enforce quality standards early and consistently — across ingestion, transformation, and delivery layers.

  • Data Ingestion: Validate raw data as it enters your platform with schema validation, completeness detection, format validation, and early failure detection

  • Lakehouse Quality: Enforce rules before persisting to storage including Delta/Iceberg/Hudi table validation, partition checks, and data freshness validation

  • ML & Analytics: Assert conditions before model training with feature quality checks, training data validation, bias detection, and model I/O validation

  • Pipeline Monitoring: Flag violations in production workflows through real-time alerts, SLA compliance monitoring, data drift detection, and automated incident response

Let’s Build Better Data Together

⭐️ Found this useful? Give it a star and help spread the word!

📣 Questions, feedback, or ideas? Open an issue or discussion — we’d love to hear from you.

🤝 Want to contribute? Check out CONTRIBUTING.md to get started.

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

sparkdq-0.11.1.tar.gz (3.1 MB view details)

Uploaded Source

Built Distribution

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

sparkdq-0.11.1-py3-none-any.whl (93.6 kB view details)

Uploaded Python 3

File details

Details for the file sparkdq-0.11.1.tar.gz.

File metadata

  • Download URL: sparkdq-0.11.1.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.17

File hashes

Hashes for sparkdq-0.11.1.tar.gz
Algorithm Hash digest
SHA256 e75605de44e337584eceb9d8b7eae5f31fec8e4b20dc8c053880a4fd720baead
MD5 3ef02b71a91d055468c7de9567ef5a30
BLAKE2b-256 c15ef2f2080c18cb21267ed77dd17bcd221e7b05c41301e59fdb23a36a641739

See more details on using hashes here.

File details

Details for the file sparkdq-0.11.1-py3-none-any.whl.

File metadata

  • Download URL: sparkdq-0.11.1-py3-none-any.whl
  • Upload date:
  • Size: 93.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.17

File hashes

Hashes for sparkdq-0.11.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b572dc8310c22b944349f007e6ac01e453dfde03c8c42b9dba44dc81d666c0d
MD5 707fcbfc4ee3fc7268f04bb75791e917
BLAKE2b-256 a8f5c6a2102061fc080b6ae39a0eeb541c1ed3f64bdae3f6fe1bf6d308415634

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