Spark DataFrame ETL 流水线
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/spark-dataframe-etl-pipeline。
技能介绍
解决什么问题
把一批 CSV、JSON 或 Parquet 塞进数仓时,工程里最常见的重复劳动是:先写一段 spark.read 猜字段类型,再写几层 withColumn 清洗空值和脏字符串,最后手工拼一条 MERGE 语句把结果写回 Delta 表。字段一变,这些脚本就跟着失效——类型推断漂移、过滤条件没下推导致全分区扫描、同一份合并逻辑在多个作业里复制粘贴。
Apache Spark DataFrame ETL 流水线 要收敛的就是这一类样板代码:用一套声明式的 DataFrame 转换流程覆盖 schema 推断、分区裁剪和 Delta Lake 合并,而不是把每个步骤散落在不同脚本里。
技能如何工作
- Schema 推断:读取源数据时自动推导列名与类型,减少手工指定 DDL 的维护成本。
- 分区裁剪:在过滤条件下推的前提下跳过无关分区,避免
SELECT * WHERE dt = ...这类全表扫描。 - Delta Lake 合并:以 merge 操作完成 upsert/delete,把增量写入变成可回滚的事务,而不是覆盖整张表。
针对湖仓架构,流水线还对接 AWS Glue Data Catalog 做元数据管理,并支持 Apache Iceberg 表格式,方便在 Spark 上切换底层存储格式。
适用边界与注意点
- 该技能覆盖的是 DataFrame 层面的转换与合并逻辑,不负责集群调度、资源配额或作业依赖编排。
- Spark 提供 Scala、Java、Python 的高层级 API;R 语言 API 已被官方标记为 Deprecated,不建议在新项目里依赖。
- 流水线依赖上游 Spark 发行版的优化引擎,版本不同时行为可能有差异,建议锁定版本后再压测分区裁剪效果。
- 示例程序与文档提取自上游 Apache Spark README,仓库地址见 GitHub 上的
1991513ccie-png/skills。
使用场景
- 每天要把CSV或JSON源文件写入Delta表,并按主键做upsert合并,避免覆盖整张表
- 数据按日期分区存储,需要筛选某几个分区时不想全表扫描,靠分区裁剪跳过无关分区
- 在AWS Glue Data Catalog里注册了库表,Spark作业要自动发现schema并读取对应元数据
- 同一套ETL逻辑要同时跑在Delta Lake和Iceberg表上,不想为两种格式各写一份代码
适合人员
- 数据工程师:反复手写spark.read类型推断和MERGE语句,想把这些样板逻辑收敛成可复用的转换流程
- 湖仓架构师:在Spark上维护Delta Lake和Iceberg两种表格式,关心分区裁剪和元数据治理
- 平台运维:管理日常ETL作业的调度与执行,希望增量写入有事务保障、出问题能回滚
- 数据平台负责人:想把Spark作业从手工脚本迁移到标准化ETL流水线,统一各团队的数据写入方式