如果你每天写 PySpark、公司用 Databricks 或 EMR 跑 Spark 作业,这张证是把"散乱的 API 记忆"变成"系统化肌肉记忆"的最快途径;如果你只是纯 SQL 数仓或不碰 Spark,完全没必要考。
先把考试形式、适合人群、备考时长和学习范围讲清楚,再决定要不要投入时间。
Databricks Certified Associate Developer for Apache Spark 是 Databricks 官方针对"能用 PySpark DataFrame API 写数据处理代码"的开发者发的认证。跟同家的 Data Engineer Associate(DEA)定位不一样:DEA 考的是"在 Databricks 平台上做数据工程"(Delta Lake、Unity Catalog、Workflows 这些平台特性),而 Spark Developer 这张证考的是纯 Apache Spark DataFrame API — 你就算用 AWS EMR、阿里云 EMR、GCP Dataproc、自建 K8s 上跑 Spark,知识也完全适用。
考试基本参数:$200 USD、60 题(单选 + 多选)、120 分钟、通过分 70%、在线 Kryterion Webassessor 监考、证书有效期 2 年、可选 Python(PySpark)或 Scala 版本,99% 的考生选 PySpark。2024 年底 Databricks 把考纲从 Spark 3.0 升级到 Spark 3.5,加入了 Spark Connect 和 Structured Streaming 的 availableNow trigger,旧版备考材料要小心。
考纲 5 大领域权重(Spark 3.5 版本):
市场定位:Apache Spark 至今仍是离线大数据处理的事实标准 — 2025 年 Stack Overflow Developer Survey 里 Spark 在 "Tools used" 的数据工程栏目排名第 3(仅次于 dbt 和 Airflow)。这张证含金量不如 AWS / Azure 云厂商证书那么"路人皆知",但在 Databricks、Shell、HSBC、Block、Rivian、Comcast 这类重度 Spark shop 面试时会被明确加分。比起 DEA,这张更适合已经有 Spark 基础、想证明自己"API 熟练度"的开发者,学习曲线相对平缓。
Databricks Spark 持证人的薪资区间、对应岗位、以及真实的职业影响。
这张证的真实含金量在哪里
跟 AWS SAA 或 Azure AZ-104 那种"地毯式"被招聘 JD 要求的证书不一样,Spark Developer Associate 不会出现在通用 JD 的 "Required Certifications" 列表里。它真正的价值是两个场景:
各市场真实行情(2026 数据)
适合考的人
不建议考的人
过来人总结的分阶段备考节奏,按周拆分,不是空话。
注册 Databricks Community Edition(免费、单节点 15GB 内存的 Cluster、足够跑所有练习)。用官方示例数据集(`/databricks-datasets/` 目录里的 airlines、diamonds、nyctaxi)跑通 5 个基础 Notebook:(1)读 CSV/Parquet/JSON 成 DataFrame;(2)select / filter / withColumn 基本变换;(3)groupBy + agg 多字段聚合;(4)两种 join 写法(DataFrame API 和 Spark SQL);(5)写 DataFrame 回 Parquet 和 Delta。不要看视频,直接敲代码 — 很多 API 的参数顺序和返回类型只有自己踩过才记得住。
读《Learning Spark, 2nd Edition》(O'Reilly, Jules Damji 等著) 的第 1-6 章 — 这本书作者是 Databricks 员工,内容跟考试高度对齐,免费版 PDF 在 Databricks 官网能下载。重点搞懂:Lazy Evaluation 为什么让 filter pushdown 变可能、Transformation 分 Narrow 和 Wide 的区别(map/filter 是 narrow,groupBy/join 是 wide)、Action 触发 Job 的机制、Shuffle 的代价和如何用 broadcast join 避免。Spark SQL Functions 部分必须会:`col`、`lit`、`when/otherwise`、`coalesce`、`expr`、`greatest/least`、日期函数(`date_add`、`date_trunc`、`to_timestamp`)、字符串函数(`split`、`regexp_replace`、`concat_ws`)。Window Functions 是考点重灾区:`row_number`、`rank`、`dense_rank`、`lag`、`lead`、`sum() over (partition by ... order by ...)`,还要会用 `Window.rowsBetween` 和 `Window.rangeBetween` 定义滑动窗口。
性能调优是区分及格和高分的关键:理解 AQE(Adaptive Query Execution,Spark 3.0+ 默认开启)、coalescePartitions、skewJoin 的工作原理;会用 `.explain()` 和 `.explain(mode="formatted")` 看物理执行计划;记住 spark.sql.shuffle.partitions 默认 200、生产经常调到 400-2000;broadcast join 的 `broadcast()` hint 和 `spark.sql.autoBroadcastJoinThreshold` 默认 10MB;cache() 和 persist(StorageLevel.MEMORY_AND_DISK) 的区别。Structured Streaming 只考基础:understand trigger 的 4 种模式(default 处理所有可用数据、`processingTime="10 seconds"`、`once=True`、`availableNow=True` — 这个是 Spark 3.3+ 加的,替代了 once)、output mode 三种(append / update / complete)、watermark 对 stateful 聚合的影响。
Databricks 官网免费提供 1 套 60 题的 Practice Exam(跟真题同源),必刷两遍。JR Academy 148+ 题库按"架构 / DataFrame API / SQL Functions / 调优 / Streaming" 5 大模块刷,每个错题都去官方 PySpark 文档(spark.apache.org/docs/latest/api/python/)查 API 细节。严格按考试环境做 3 次全真模考:关手机、计时 120 分钟、60 题一口气做完、做完再对答案。目标:连续 2 次 ≥ 80% 再约正式考试。考前一天测试 Webassessor 考试系统、摄像头、有线网络。
过来人的备考时长、分数、以及踩过的坑。
我在一家外资银行写 PySpark 3 年了,工作基本能 cover 80% 考点。实际备考时发现自己最薄弱的是 Window Functions — 虽然工作里写过几次,但 `rangeBetween` 和 `rowsBetween` 的区别一直似懂非懂。考题里有 3-4 道题专门考这个,`Window.orderBy("date").rangeBetween(-7, 0)` 对应的是按日期值往前 7 天(不是 7 行),这个细节不深究的话很容易答错。另一个意外是 `broadcast()` hint 的题 — 考题会给你一段 join 代码让你判断优化方案,没背过 autoBroadcastJoinThreshold 默认 10MB 这个数字就会选错。最终 83% 通过。
我之前 4 年都在写 Scala Spark,核心概念完全熟,以为一周就能考下来 — 结果差点挂。PySpark 的 API 跟 Scala 不是 1:1 的:比如 Scala 里 `df.select($"col")`,PySpark 里是 `df.select(col("col"))` 或 `df.select("col")`;Scala 里 case class 直接转 DataFrame,PySpark 里要写 StructType schema。考试 60 题里有至少 10 题是考"这段 PySpark 代码是否正确",转行者很容易栽。建议从 Scala 转 PySpark 的人至少花 2 周专门敲 PySpark 代码,不要以为"我会 Spark 就行"。
完全零经验,从 Databricks Community Edition 起步。前 4 周全在学基础概念 — 什么是 RDD、什么是 DataFrame、Transformation 和 Action 的区别、为什么要懒求值。中间 3 周重点刷 DataFrame API 和 SQL Functions,这部分题量最大也最实在。最后 3 周刷题和模考。考试当天最紧张的是 Structured Streaming 那部分 — 我完全没有真实项目经验,全靠死背 trigger 模式和 watermark 概念,最后那 10 题大概只答对 6 题。好在其他部分答得不错,72% 擦边过。给应届生的建议:Streaming 不要死记硬背,花 2 天在 Community Edition 跑一个 readStream → writeStream 的小 demo,会好很多。
| Databricks Spark | Databricks DEA | Databricks MLP | |
|---|---|---|---|
| 机构 | 其他 | 其他 | 其他 |
| 级别 | 助理级 | 助理级 | 专业级 |
| 考试费 | $0 | $0 | $0 |
| 时长 | 90 min | 90 min | 90 min |
| 题量 | 65 | 65 | 54 |
| 有效期 | 3 年 | 3 年 | 3 年 |
**Python 版优先选择**:考试有 Python 和 Scala 两个版本,99% 的考生选 Python,JR 题库和官方 Practice Exam 也默认 Python。除非你本职就是 Scala 开发者,否则别挑战 Scala 版。
**官方 Practice Exam 必刷**:Databricks 官网免费提供 1 套 60 题的 Practice Exam,题目质量和真题几乎一致,必须刷两遍。第一遍裸考看差距,第二遍每道题回去查官方文档搞懂"为什么这个选项对"。
**《Learning Spark, 2nd Edition》前 6 章精读**:这本书作者 Jules Damji 是 Databricks 员工,内容跟考纲对齐度最高。Databricks 官网可以免费下载 PDF,比买任何第三方教材都靠谱。第 8 章(Structured Streaming)简读即可 — 考试只考基础概念。
**PySpark 官方 API 文档加书签**:spark.apache.org/docs/latest/api/python/ 是备考期间最频繁访问的页面。很多细节(比如 `dropDuplicates` 的 `subset` 参数接 list of column names、`withColumnRenamed` 只能一次改一列)文档里写得最清楚。
**Databricks Community Edition 动手跑**:所有考点都要在 Notebook 里至少敲一遍 — 特别是 Window Functions、groupBy + agg 的多种写法、broadcast join 的执行计划。光看题不敲代码考试时会很虚。
**在线监考准备**:考试通过 Kryterion Webassessor 在线监考,要求:桌面完全清空(只能有电脑、不能有手机/纸/笔/耳机/水杯)、房间 360° 录像检查、全程脸不能离开摄像头、不能读题出声、必须用有线网络(WiFi 掉线风险大)。提前 30 分钟 check-in,考试系统要提前一天下载测试。
**证书有效期 2 年,可免费续期**:到期前登录 Databricks Credentials 门户做免费的 Recertification Exam(不用再交 $200)— 这点比 AWS Associate 证书(续期要重考 + 交 $150)性价比好。但 Databricks 的 recert 题目也会更新到最新 Spark 版本,不能裸考。
**混淆 `select` 和 `withColumn` 的使用场景** — `withColumn("new_col", expr)` 只加一列或替换同名列,每次 withColumn 都会触发一次 projection plan 重建;生产代码里连续 10 个 withColumn 会让 Catalyst 优化变慢。正确做法是多列变换用 `df.select("*", expr1.alias("a"), expr2.alias("b"))` 或 `df.select([col(c) for c in df.columns] + [new_col_expr])`。考题会给一段循环 withColumn 的代码问性能问题在哪。
**Window Functions 的 `rangeBetween` vs `rowsBetween` 搞错** — `rowsBetween(-6, 0)` 是往前 6 **行**(不管值是什么),`rangeBetween(-6, 0)` 是往前 6 **个单位的值**(通常要先把 orderBy 的列转成数字或秒数)。如果你写 `Window.orderBy("date").rangeBetween(-7, 0)` 直接用 date 列,Spark 3.5 要求你先把 date 转成 unix timestamp 才能用 range — 很多人不知道这个。
**以为 `cache()` 会立刻执行** — `cache()` 是 Transformation,惰性求值。只有在下一个 Action(比如 `count()`、`show()`、`write()`)时才会真的把数据缓存到内存。考题会问"执行完 `df.cache()` 后内存里有数据吗"(没有,要等到 Action 触发)。另外 `cache()` 等价于 `persist(StorageLevel.MEMORY_AND_DISK)`,不是 MEMORY_ONLY — 这是 Spark 2.0+ 改的默认值。
**broadcast join 的阈值和强制使用** — `spark.sql.autoBroadcastJoinThreshold` 默认 10MB(不是 100MB 也不是 1GB),超过这个阈值 Spark 不会自动 broadcast。要强制 broadcast 大表(一般不建议,除非你知道自己在干嘛)要用 `df1.join(broadcast(df2), ...)` — 注意 `broadcast()` 是从 `pyspark.sql.functions` 导入的 hint 函数,不是 DataFrame 方法。考题常给你一个 10GB 的 fact 表 join 一个 8MB 的 dim 表问是否会触发 broadcast(会,因为 dim 表 < 10MB)。
**Transformation vs Action 记反** — 常见陷阱:`count()` 是 Action、`countDistinct()` 是 Transformation(返回一个 Column 对象要包在 `agg()` 里用)、`show()` 是 Action、`explain()` 是 Action(会触发 physical plan 生成)、`collect()` 是 Action 且会把所有数据拉到 Driver(生产环境慎用)、`take(n)` 是 Action 但只拉 n 行、`cache()` 和 `persist()` 都是 Transformation。考题会给一个 10 个方法调用的链问"触发了几次 Job"。
**Structured Streaming 的 trigger 和 output mode 配错** — `complete` output mode 只能和带 aggregation 的 query 搭配(没聚合就没法 complete,会直接报错);`update` mode 只会输出本次 batch 改变的行;`append` mode 不支持没有 watermark 的聚合(因为 Spark 不知道什么时候可以"最终输出")。Spark 3.3+ 加的 `availableNow=True` trigger 替代了 `once=True`,区别是 availableNow 会把未处理的所有数据分批处理、once 只处理一次。考题会问"用 complete mode 处理一个没有 groupBy 的流"会怎么样(报错 AnalysisException)。
**UDF 性能陷阱** — Python UDF 会触发 Python <-> JVM 的序列化,性能比内置函数慢 2-10 倍。Spark 2.3+ 引入 Pandas UDF(`@pandas_udf`)用 Arrow 批量传输,性能接近原生。考题会给一段用 Python UDF 写的简单字符串拼接代码让你优化 — 正确答案永远是"用内置的 `concat` 或 `concat_ws` 函数替代 UDF"。面试官常问这个。
**`partitionBy` 和 `repartition` 记混** — `df.write.partitionBy("date")` 是**写文件时**按 date 分文件夹(Hive 风格 partitioning);`df.repartition(100, "date")` 是**运行时**把 DataFrame 重新 hash 分到 100 个 partition(影响下游 shuffle)。考题会同时给两个方法问"哪个影响磁盘布局"(partitionBy)和"哪个影响 shuffle 并行度"(repartition)。还要注意 `repartition(n)` 会触发 shuffle,`coalesce(n)` 只在 n 小于当前 partition 数时有效且不触发 shuffle。