Eclipse Aerospace借助Databricks简化飞行数据接入

Eclipse Aerospace借助Databricks简化飞行数据接入

💡 原文英文,约2100词,阅读约需8分钟。
📝

内容提要

Eclipse Aerospace与Databricks合作开发PySpark自定义数据源连接器,将专有飞行数据格式直接接入Spark。该方案以Python为控制层、Rust负责高性能解码,并通过Apache Arrow实现零拷贝数据传输。相比原先经AWS Lambda转Avro的多阶段流程,新连接器可在Serverless上直接读取原始文件,显著降低延迟、存储与运维成本,提升可观测性,使近20年、超3TB飞行数据更易分析。

🔎

延伸解读

为何不直接用UDF或原生连接器

文章指出,Eclipse Aerospace 曾评估三种方案:UDF 简单但遇变长消息可能内存溢出;用 Scala 解码器实现原生 Data Source 需常开专用计算,成本高;经 AWS Lambda 转 Avro 虽低成本,却引入多阶段延迟和重复存储。最终选择 PySpark 自定义数据源,是因为它能在 Serverless 上直接读取原始文件,兼顾成本与性能,且无需维护常开基础设施。

Rust+Arrow 的性能来源

新连接器以 Python 为控制层,Rust 负责解码,并通过 Apache Arrow 的 C Data Interface 实现零拷贝传输。文章给出的基准显示,Rust 后端比纯 Python 的 PyArrow 实现快约一倍,比无 Arrow 的原生 Python 实现快近 20 倍。关键在于解码核心不依赖 Spark,只接收字节并返回结构化记录,Arrow 是唯一跨 FFI 边界的数据,避免了序列化和逐行 Python 对象构建。

对数据团队的实际收益

文章从四个维度说明影响:延迟上,多跳管道被压缩为单次 Spark 读取,文件上传后一分钟内可处理记录,大型多 GB 批次通常两分钟内并行完成;成本上,去掉 Lambda 和 Avro 中间层,不再为每份飞行数据存两份副本;可观测性上,解码步骤直接出现在 Spark UI 和作业指标中;工程时间上,schema 只需在连接器内定义一次,避免 Lambda 与下游 Spark 作业两处维护。

复用时的注意事项

该模式可复用于其他专有格式,但文章提醒,由于实现是编译产物,版本和架构兼容性需要谨慎管理,需借助 CI/CD 流程。此外,PySpark 层要保持轻量,因为 DataSourceReader 会被序列化并分发到 worker,Rust 对象应在 read() 内构造,避免被 pickle。这些设计约束是复制该架构时值得留意的点。

❓

Q&A

Eclipse Aerospace 之前用 AWS Lambda 转 Avro 的方案有什么问题?

该方案虽然成本低,但需要多阶段流程:上传、Lambda 解码、写 Avro、读 Avro、加载到 Delta,导致延迟高、需要存储原始二进制和 Avro 两份副本、运维复杂,且解码步骤不在 Spark 内,可观测性差。

新的 PySpark 自定义数据源连接器是如何实现高性能解码的?

连接器以 Python 作为控制层,负责解析选项、分区和定义 schema;核心解码逻辑用 Rust 编写,通过 PyO3/Maturin 打包成 Python wheel。Rust 使用 arrow-rs 构建 Arrow RecordBatch,并通过 Arrow C Data Interface 零拷贝传递给 Python,避免序列化和逐行对象创建,从而实现高性能。

新连接器相比旧方案在延迟和成本上具体有哪些改善?

延迟方面,将多跳管道合并为单次 Spark 原生读取,文件上传后一分钟内可处理记录,大型多 GB 批次通常两分钟内并行完成。成本方面,移除了 Lambda 和 Avro 中间层,不再需要存储两份数据(原始二进制和 Avro 副本),大部分文件保留在 Glacier 存储中,显著降低存储和基础设施费用。

新方案如何提升可观测性和工程效率?

可观测性:解码步骤在 Spark 内运行,出现在 Spark UI 和标准作业指标中;使用自定义 badRecordsPath 捕获格式错误数据,并维护数据质量管道从解码器收集统计信息。工程效率:schema 只需在连接器内定义一次,与解码逻辑放在一起,避免在 Lambda 和下游 Spark 作业中重复定义,减少维护风险和代码漂移。

PySpark 自定义数据源在 Databricks 上需要什么版本支持?

该 API 在 Apache Spark 4.0 中引入,在 Databricks Runtime 15.4 LTS 及以上版本正式可用,同时也支持 Serverless 环境版本 2 及更高版本。

这种连接器模式可以复用到其他专有格式吗?

可以。Eclipse Aerospace 采用的“薄 Python DataSource 包装 Rust 解码器”的架构模式是通用的,可复用于其他专有格式,无需为每种格式重新发明。团队可以将领域特定的解码逻辑保留在源格式附近,通过 PySpark 自定义数据源暴露,让 Spark 处理分区、执行、可观测性和下游处理。

🏷️

标签

➡️

继续阅读