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:
intbigintfloatdoublestringbooleandatetimestampdecimal(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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| markdown_frames-1.0.6.tar.gz | 6.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.