Sparglim ✨
Sparglim is aimed at providing a clean solution for PySpark applications in cloud-native scenarios (On K8S、Connect Server etc.).
This is a fledgling project, looking forward to any PRs, Feature Requests and Discussions!
🌟✨⭐ Start to support!
Quick Start
Run Jupyterlab with sparglim docker image:
docker run \
-it \
-p 8888:8888 \
wh1isper/jupyterlab-sparglim
Access http://localhost:8888 in browser to use jupyterlab with sparglim. Then you can try SQL Magic.
Run and Daemon a Spark Connect Server:
docker run \
-it \
-p 15002:15002 \
-p 4040:4040 \
wh1isper/sparglim-server
Access http://localhost:4040 for Spark-UI and sc://localhost:15002 for Spark Connect Server. Use sparglim to setup SparkSession to connect to Spark Connect Server.
Install: pip install sparglim[all]
- Install only for config and daemon spark connect server
pip install sparglim - Install for pyspark app
pip install sparglim[pyspark] - Install for using magic within ipython/jupyter (will also install pyspark)
pip install sparglim[magic] - Install for all above (such as using magic in jupyterlab on k8s)
pip install sparglim[all]
Feature
- Config Spark via environment variables
%SQLand%%SQLmagic for executing Spark SQL in IPython/Jupyter- SQL statement can be written in multiple lines, support using
;to separate statements - Support config
connect client, see Spark Connect Overview - TODO: Visualize the result of SQL statement(Spark Dataframe)
- SQL statement can be written in multiple lines, support using
sparglim-serverfor daemon Spark Connect Server
User cases
Basic
from sparglim.config.builder import ConfigBuilder
from datetime import datetime, date
from pyspark.sql import Row
# Create a local[*] spark session with s3&kerberos config
spark = ConfigBuilder().get_or_create()
df = spark.createDataFrame([
Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
])
df.show()
Building a PySpark App
To config Spark on k8s for Data explorations, see examples/jupyter-sparglim-on-k8s
To config Spark for ELT Application/Service, see project pyspark-sampling
Deploy Spark Connect Server on K8S (And Connect to it)
To daemon Spark Connect Server on K8S, see examples/sparglim-server
To daemon Spark Connect Server on K8S and Connect it in JupyterLab , see examples/jupyter-sparglim-sc
Connect to Spark Connect Server
Only thing need to do is to set SPARGLIM_REMOTE env, format is sc://host:port
Example Code:
import os
os.environ["SPARGLIM_REMOTE"] = "sc://localhost:15002" # or export SPARGLIM_REMOTE=sc://localhost:15002 before run python
from sparglim.config.builder import ConfigBuilder
from datetime import datetime, date
from pyspark.sql import Row
c = ConfigBuilder().config_connect_client()
spark = c.get_or_create()
df = spark.createDataFrame([
Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
])
df.show()
SQL Magic
Install Sparglim with
pip install sparglim["magic"]
Load magic in IPython/Jupyter
%load_ext sparglim.sql
spark # show SparkSession brief info
Create a view:
from datetime import datetime, date
from pyspark.sql import Row
df = spark.createDataFrame([
Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
])
df.createOrReplaceTempView("tb")
Query the view by %SQL:
%sql SELECT * FROM tb
%SQL result dataframe can be assigned to a variable:
df = %sql SELECT * FROM tb
df
or %%SQL can be used to execute multiple statements:
%%sql SELECT
*
FROM
tb;
You can also using Spark SQL to load data from external data source, such as:
%%sql CREATE TABLE tb_people
USING json
OPTIONS (path "/path/to/file.json");
Show tables;
Develop
Install pre-commit before commit
pip install pre-commit
pre-commit install
Install package locally
pip install -e .[test]
Run unit-test before PR, ensure that new features are covered by unit tests
pytest -v
(Optional, python<=3.10) Use pytype to check typed
pytype ./sparglim
Metadata
Release files for sparglim 0.2.1
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 | |
|---|---|---|---|---|
| sparglim-0.2.1.tar.gz | 28.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sparglim-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.6 kB
Release files / sparglim-0.2.1.tar.gz
| Download URL | sparglim-0.2.1.tar.gz |
|---|---|
| Size | 28.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e37ddd24df47524fea92da31f433c53a18cc614bc19faadb3f85753dadad6f39
|
|
BLAKE2b-256 checksum How to use checksums |
672e2b98cb8b015df42002880d327b694e975f245abeb3a495d629e7560c4e22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.18
|
Release files / sparglim-0.2.1-py3-none-any.whl
| Download URL | sparglim-0.2.1-py3-none-any.whl |
|---|---|
| Size | 17.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0385a32675357aed61ab554f1c64b9841a64ed748e294672becedc4b77f8a6b8
|
|
BLAKE2b-256 checksum How to use checksums |
2d7bd8875370bd503cde5156360855c4faad96029aac026cc116ae132f8fc93b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.18
|
Security for sparglim 0.2.1
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.