Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/exacaster/markdown_frames
Markdown tables parsing to pySpark/Pandas DataFrames
https://github.com/exacaster/markdown_frames
pyspark pytest spark
Last synced: about 1 month ago
JSON representation
Markdown tables parsing to pySpark/Pandas DataFrames
- Host: GitHub
- URL: https://github.com/exacaster/markdown_frames
- Owner: exacaster
- License: mit
- Created: 2022-02-04T12:10:34.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-09-12T13:41:23.000Z (over 2 years ago)
- Last Synced: 2024-08-08T16:33:16.384Z (5 months ago)
- Topics: pyspark, pytest, spark
- Language: Python
- Homepage:
- Size: 20.5 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://exacaster.com/) [Vaidas Armonas](https://github.com/Va1da2) 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:
```python
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:
```python
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:
```bash
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):
```python
from pyspark.sql import SparkSession
from markdown_frames.spark_dataframe import spark_dfdef 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 can be replaced by any of mentioned types)
- `map` (string and int can be replaced by any of mentioned types)For `null` values use `None` keyword.
## License
This project is [MIT](./LICENSE) licensed.