SuperAPI AI 工具集

spark-python-data-source

编程与开发

查看项目

更新于 10-15 20:32

技能介绍

用途:为 Apache Spark 4.0+ 构建自定义 Python 数据源,通过 PySpark DataSource API 从外部系统读写数据,支持批处理与流式两种模式。

主要能力:每个数据源采用扁平的单层继承结构,包含 DataSource 入口类、Base Reader/Writer 基类,以及批处理类(继承基类与 DataSourceReader/DataSourceWriter)和流类(继承基类与 DataSourceStreamReader/DataSourceStreamWriter)。

设计约束:PySpark 会将 reader/writer 实例序列化后发送到 executor,因此仅使用扁平单层继承,避免复杂继承与抽象基类;第三方库必须在 executor 方法内部导入,因为驱动端顶层导入在 executor 上不可用;应尽量减少依赖,每个包都需安装在所有 executor 节点;除非外部系统 SDK 仅支持异步,否则不使用 async/await。

项目设置:使用 uv、poetry 或 hatch 等打包工具,示例使用 uv: uv init your-datasource cd your-datasource uv add pyspark pytest pytest-spark 命令通过打包工具运行:uv run pytest、uv run ruff check src/、uv run ruff format src/、uv build。

关键实现决策:分区策略可选基于时间、token 范围或 ID 范围;认证按 Databricks Unity Catalog 凭据、云默认凭据、显式凭据的优先级支持多种方式;需处理 Spark 与外部类型间的转换(空值、时间戳、UUID、集合);流式偏移需设计为可 JSON 序列化且分区边界不重叠以支持恰好一次语义;错误处理包括对瞬时失败的指数退避重试与熔断。

测试:使用 pytest 与 unittest.mock,可通过 patch('requests.post') 等模拟外部调用,并借助本地 SparkSession 编写单元测试。

适用场景:从 MongoDB(含分片)、RabbitMQ 流式、Snowflake 批量写入、带 OAuth2 与分页的 REST API 等外部系统读写数据,并可用于 Databricks 集群测试与 DLT 管道。

限制:面向 Spark 4.0+;依赖需部署到全部 executor 节点;具体价格与更多平台细节暂未提供。