Sparglim✨: 让PySpark on K8S和Spark Connect Server更简单

简介

发现市面上基本没有对 PySpark 进行配置的工具,同时 Spark 3.4.0 引入了 server-client 模式,也没有比较好的解决方案,我这里开源了一个简单的模块,支持以下功能:

  • 通过环境变量配置 Spark ,参见 config spark
  • 在 IPython/Jupyter 中执行 Spark SQL 的 %SQL%%SQL magic
    • SQL 语句可分多行编写,支持使用 ; 分隔语句
    • 支持配置连接客户端
  • sparglim-server用于创建daemon Spark Connect Server ,并支持 on K8S 部署

快速开始

Run Jupyterlab with sparglim docker image:

bash 复制代码
docker run \
-it \
-p 8888:8888 \
wh1isper/jupyterlab-sparglim

访问 http://localhost:8888 来使用jupyterlab,然后可以试试SQL功能SQL Magic.

Run and Daemon a Spark Connect Server:

bash 复制代码
docker run \
-it \
-p 15002:15002 \
-p 4040:4040 \
wh1isper/sparglim-server

访问 http://localhost:4040 查看Spark-UI并通过sc://localhost:15002连接Spark Connect Server. Use sparglim to setup SparkSession to connect to Spark Connect Server.

用户案例

直接使用:Basic

直接通过代码快速配置SparkSession

sql 复制代码
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()

构建一个PySpark应用: Building a PySpark App

配置PySpark on K8S以支持使用JupyterLab的数据探索任务:examples/jupyter-sparglim-on-k8s

配置PySpark以开发ELT服务:pyspark-sampling

部署Spark Connect Server:Deploy Spark Connect Server on K8S (And Connect to it)

部署Spark on K8S模式下的Spark Connect Server:examples/sparglim-server

部署Spark on K8S模式下的Spark Connect Server,并通过JupyterLab连接它:examples/jupyter-sparglim-sc

连接已有的Spark Connect ServerConnect to Spark Connect Server

只需要配置环境变量 SPARGLIM_REMOTE, 格式为sc://host:port

Example Code:

python 复制代码
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

bash 复制代码
pip install sparglim["magic"]

Load magic in IPython/Jupyter

ipython 复制代码
%load_ext sparglim.sql
spark # show SparkSession brief info

Create a view:

python 复制代码
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 复制代码
%sql SELECT * FROM tb

%SQL result dataframe can be assigned to a variable:

python 复制代码
df = %sql SELECT * FROM tb
df

or %%SQL can be used to execute multiple statements:

sql 复制代码
%%sql SELECT
        *
        FROM
        tb;

You can also using Spark SQL to load data from external data source, such as:

sql 复制代码
%%sql CREATE TABLE tb_people
USING json
OPTIONS (path "/path/to/file.json");
Show tables;
相关推荐
是阿威啊25 分钟前
【用户行为归因分析项目】- 【企业级项目开发第五站】数据采集并加载到hive表
大数据·数据仓库·hive·hadoop·spark·scala
云器科技11 小时前
告别Spark?大数据架构的十字路口与技术抉择
大数据·架构·spark·lakehouse·数据湖仓
云器科技1 天前
云器Lakehouse2025年03月版本发布:打造更强大、更智能、更安全的数据管理新体验
大数据·数据库·架构·spark·lakehouse
会编程的李较瘦2 天前
【期末考试总结】spark课程知识点
大数据·单例模式·spark
linweidong3 天前
Spark Shuffle的优化
大数据·分布式·spark
天码-行空4 天前
【大数据环境安装指南】ZooKeeper搭建spark高可用集群教程
大数据·linux·运维·zookeeper·spark
想你依然心痛5 天前
Spark大数据分析与实战笔记(第六章 Kafka分布式发布订阅消息系统-02)
笔记·分布式·spark
云器科技6 天前
NinjaVan x 云器Lakehouse: 从传统自建Spark架构升级到新一代湖仓架构
大数据·ai·架构·spark·湖仓平台
是阿威啊6 天前
【用户行为归因分析项目】- 【企业级项目开发第一站】项目架构和需求设计
大数据·hive·hadoop·架构·spark·scala
qq_12498707536 天前
基于spark的西南天气数据的分析与应用(源码+论文+部署+安装)
大数据·分布式·爬虫·python·spark·毕业设计·数据可视化