Skip to main content

Markdown Frames

Helper package for testing Apache Spark and Pandas DataFrames. It makes your data-related unit tests more readable.

History

While working at Exacaster Vaidas Armonas came up with the idea to make testing data more representable. And with the help of his team, he implemented the initial version of this package.

Before that, we had to define our testing data as follows:

schema = ["user_id", "even_type", "item_id", "event_time", "country", "dt"]
input_df = spark.createDataFrame([
    (123456, 'page_view', None, datetime(2017,12,31,23,50,50), "uk", "2017-12-31"),
    (123456, 'item_view', 68471513, datetime(2017,12,31,23,50,55), "uk", "2017-12-31")], 
    schema)

And with this library you can define same data like this:

input_data = """ 
    |  user_id   |  even_type  | item_id  |    event_time       | country  |     dt      |
    |   bigint   |   string    |  bigint  |    timestamp        |  string  |   string    |
    | ---------- | ----------- | -------- | ------------------- | -------- | ----------- |
    |   123456   |  page_view  |   None   | 2017-12-31 23:50:50 |   uk     | 2017-12-31  |
    |   123456   |  item_view  | 68471513 | 2017-12-31 23:50:55 |   uk     | 2017-12-31  |
"""
input_df = spark_df(input_data, spark)

Installation

To install this package, run this command on your python environment:

pip install markdown_frames[pyspark]

Usage

When you have this package installed, you can use it in your unit tests as follows (assuming you are using pytest-spark ang have Spark Session available):

from pyspark.sql import SparkSession
from markdown_frames.spark_dataframe import spark_df

def test_your_use_case(spark: SpakSession): -> None
    expected_data = """
        | column1 | column2 | column3 | column4 |
        |   int   |  string |  float  |  bigint |
        | ------- | ------- | ------- | ------- |
        |   1     |   user1 |   3.14  |  111111 |
        |   2     |   None  |   1.618 |  222222 |
        |   3     |   ''    |   2.718 |  333333 |
        """
    expected_df = spark_df(expected_data, spark)

    actaual_df = your_use_case(spark)

    assert expected_df.collect()) == actaual_df.collect())

Supported data types

This package supports all major datatypes, use these type names in your table definitions:

  • int
  • bigint
  • float
  • double
  • string
  • boolean
  • date
  • timestamp
  • decimal(precision,scale) (scale and precision must be integers)
  • array<int> (int can be replaced by any of mentioned types)
  • map<string,int> (string and int can be replaced by any of mentioned types)

For null values use None keyword.

License

This project is MIT licensed.

Metadata

Release files for markdown-frames 1.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for markdown-frames 1.0.6
File Size Uploaded Provenance
markdown_frames-1.0.6.tar.gz 6.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for markdown-frames 1.0.6
File Interpreter ABI Platform
markdown_frames-1.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 14.7 kB

Release files / markdown_frames-1.0.6.tar.gz

Download URL markdown_frames-1.0.6.tar.gz
Size 6.3 kB
Tags Source
SHA-256 checksum
How to use checksums
41c7b04ee9579490b2851c092d3f2f47482c5f85b124ed98860f0245d3fa34a0
BLAKE2b-256 checksum
How to use checksums
b51ce1bf523d26db16a99d1b3c024834f8f5cdb3c52afb6f381fcc6ae6463c5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.14

Release files / markdown_frames-1.0.6-py3-none-any.whl

Download URL markdown_frames-1.0.6-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
829e1aab8afd8802d4222e67794ecb3a69eeaa7c463d33481c546d48a5a78f60
BLAKE2b-256 checksum
How to use checksums
399887758067c76a789a8c797a00af6b357ff59cd191f75c7ae28d906a5da0c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.14

Security for markdown-frames 1.0.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page