🎁 立即注册,最多可免费使用 30 分钟在线 AI,无需信用卡。

Databricks 面试问题与答案:关于 Spark、Delta Lake 和管道的 25 个问题

August 31, 2026
Databricks 面试问题与答案,涵盖 Spark shuffle 和数据倾斜、Delta Lake、MERGE、OPTIMIZE、Unity Catalog、medallion 设计以及慢作业场景。
Databricks 面试问题与答案:关于 Spark、Delta Lake 和管道的 25 个问题
databricks 面试问题
databricks 面试问题与答案
delta lake 面试问题
spark 面试问题 databricks

Databricks 面试通常会把 Apache Spark(作业如何运行、为什么慢)、Delta Lake(表为什么可靠)以及平台本身(集群、作业、治理)混在一起考。最出彩的回答会把每个概念对应到一个真实问题上,比如数据倾斜的 join、小文件,或者必须能安全重跑的流水线。

Databricks 改产品和重组产品的频率挺高,所以说清楚你用过哪些名字(比如 Delta Live Tables,现在属于 Lakeflow 家族),并且对照职位描述确认技术栈。

下面是 25 道题及参考答案。

平台与架构

1. 什么是 Databricks?什么是 lakehouse?

Databricks 是一个围绕 Apache Spark 构建的云端数据与 AI 平台。Lakehouse 把数据以开放格式存放在云对象存储上,再叠加数仓级别的可靠性和治理能力,这样一份数据就能同时服务工程、分析和机器学习。

2. all-purpose 集群、job 集群和 SQL warehouse 有什么区别?

All-purpose 集群用于交互式工作和开发。Job 集群随定时作业启动,作业结束后关闭,成本更低。SQL warehouse 是专为 SQL 和 BI 查询调优的计算资源。

3. 你怎么控制成本?

生产环境用 job 集群;交互式集群开启自动终止;自动扩缩容并设置合理的上下限;选择合适的实例类型;容错要求不高的工作用 spot 实例;用集群策略限制用户能创建什么;再用标签做成本归集。

4. 什么是 Unity Catalog?

它是数据和 AI 资产的治理层,提供三级命名空间(catalog、schema、table)、集中式访问控制、血缘追踪,以及跨工作区的审计。

Delta Lake

5. 什么是 Delta Lake?为什么用它而不是普通 Parquet?

Delta Lake 是一种表格式,在 Parquet 文件之上加了一层事务日志。它带来 ACID 事务、schema 强制与演进、时间旅行,以及高效的更新和删除。普通 Parquet 没有事务,写入失败可能留下部分数据,读端也可能看到不一致的状态。

6. Delta 事务日志是怎么工作的?

每次提交都会在 _delta_log 目录里追加一条 JSON 记录,并定期生成 checkpoint。日志记录了每个版本下表中包含哪些数据文件。读端靠它看到一致的快照,写端则用乐观并发控制,如果和另一个提交冲突就重试或失败。

7. 什么是时间旅行?

按版本号或时间戳查询表的早期版本,用于审计、排查问题或回滚。

SELECT * FROM sales VERSION AS OF 12;
RESTORE TABLE sales TO VERSION AS OF 12;

8. 怎么用 Delta 做 upsert?

用 MERGE INTO:

MERGE INTO customers t
USING updates s ON t.id = s.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;

要确保源数据每个 key 只有一行,否则 merge 会失败或产生错误结果。

9. OPTIMIZE 和 VACUUM 分别做什么?

OPTIMIZE 把大量小文件合并成大文件,加快读取。VACUUM 删除表不再引用、且超过保留期的文件,释放存储空间,但会限制时间旅行的范围。如果有其他作业可能还在读旧版本,别把保留期设得太短。

10. 怎么布局数据才能让查询更快?

只按查询经常过滤的低基数列做分区,并且保证分区足够大。过度分区会产生大量小文件。其他列可以用 Z-ordering 或 liquid clustering(更新的做法),通过聚簇让查询能跳过文件。

Spark 基础

11. 什么是转换和行动?什么是惰性求值?

filter、select 这类转换只会构建执行计划,并不会真正运行。count、write 这类行动才会触发执行。正因为 Spark 能先看到完整的计划,它才能对计划进行优化。

12. 什么是 shuffle?为什么它开销这么大?

shuffle 会在网络上跨 executor 移动数据,让相同 key 的行落到一起,比如 join、groupBy 和 distinct 都会用到。它涉及磁盘和网络 I/O,所以减少 shuffle 是让作业跑得更快的主要途径。

13. Spark 如何 join 两张表?怎样加速?

默认情况下,大表 join 会使用 shuffle(sort-merge)join。如果其中一张表很小,广播 join 会把它发送到每个 executor,从而避免对大表做 shuffle。

from pyspark.sql.functions import broadcast
df = big.join(broadcast(small), "id")

14. 什么是数据倾斜?如何解决?

少数几个 key 承载了大部分行,导致少数几个 task 比其他 task 慢得多。迹象是在 Spark UI 中看到某个 task 长时间运行。解决办法有:自适应查询执行的倾斜处理、对 key 加盐、广播较小的一侧,或者过滤掉导致倾斜的 null 或默认 key。

15. 什么是自适应查询执行(AQE)?

Spark 会在执行过程中根据真实统计信息调整计划:它可以合并小的 shuffle 分区、切换 join 策略,以及拆分倾斜的分区。在较新版本中它默认开启。

16. repartition 和 coalesce 有什么区别?

repartition 可以增加或减少分区,并且会做完整的 shuffle。coalesce 只能减少分区,且避免完整 shuffle,所以开销更低,但可能产生不均匀的分区。

17. 什么时候应该缓存 DataFrame?

当你在一个作业中多次复用同一个 DataFrame,且重新计算的开销很大时。只用一次的东西不要缓存,用完记得释放缓存。

18. 为什么优先使用内置函数而不是 Python UDF?

内置函数在 JVM 内运行,可以被优化。Python UDF 需要在 JVM 和 Python 之间搬运数据,而且对优化器来说是不透明的,所以更慢。尽可能使用内置函数或 pandas UDF。

管道

19. 什么是 medallion 架构?

一种分层设计:bronze 存放原始摄入的数据,silver 存放清洗并统一后的数据,gold 存放可直接用于报表的业务级聚合数据。它清楚地界定了质量检查发生在哪一层,并让你能从更早的层重建后续的层。

20. 什么是 Auto Loader?

一项能随着新文件到达,从云存储中增量且高效地摄入新文件的功能,它会跟踪已处理过哪些文件,并支持 schema 推断和演进。

21. Structured Streaming 如何处理故障和 exactly-once?

它使用 checkpoint 来存储进度和状态,因此重启后的查询会从停止的地方继续。配合可重放的 source 以及幂等或事务性的 sink(如 Delta),你就能获得端到端的 exactly-once 结果。

22. 如何让管道可以安全地重跑?

让写入幂等:基于 key 使用 MERGE、覆盖特定分区,或者用 run ID 避免重复。保持作业的输入范围明确,并记录行数以便核对结果。

23. 如何做数据质量检查?

在管道中使用 expectation 或约束(例如 Delta 约束或声明式管道 expectation),校验行数、null 和唯一性,并隔离坏数据而不是让整个加载失败,具体取决于与下游用户的约定。

场景题

24. 一个原本 20 分钟跑完的作业现在要三个小时。你会怎么做?

  1. 对比两次运行的 Spark UI:哪个 stage 变慢了?
  2. 检查输入规模,以及某张表是否变大或失去了布局,比如出现大量小文件。
  3. 在慢的 stage 中查找倾斜,以及是否有溢写到磁盘。
  4. 检查集群变化,比如 worker 变少或实例类型改变。
  5. 检查代码或 Spark 设置的改动,以及是否新增了 join 或 UDF。
  6. 修复根因(compaction、广播、倾斜处理或调整规格),并加上监控。

25. 设计一个摄入每日 JSON 文件并为仪表盘提供数据的管道。

“Auto Loader 把新文件读入一张 bronze Delta 表,包含原始数据和元数据。一个作业解析并清洗它们写入 silver,用 MERGE 按 key 去重。一张 gold 表为仪表盘做聚合,仪表盘从 SQL warehouse 读取。Unity Catalog 管理访问权限,expectation 捕获坏数据,作业运行在 job cluster 上,并对失败和行数异常设置告警。”

如何准备

用一个 notebook 完整跑一遍流程:读取文件、关联另一张表、写入 Delta,并使用 MERGE。打开 Spark UI,找出一次 shuffle 和一个数据倾斜的 task。准备一个关于加速或修复 pipeline 的故事,并带上具体数字。相关主题可参考我们的 Kafka、Snowflake 和 Talend 指南。

把答案大声说出来,尤其是性能相关的答案——很多候选人在这一块往往只罗列调优技巧,却缺乏诊断思路。一份模拟面试记录能看出问题出在哪。在任何实时面试中,都要遵守雇主关于 AI 工具的规定。

使用 YesToTheOffer 练习 Databricks 面试答案

进行一次模拟技术面试,大声解释管道设计,然后回顾你的记录。30 分钟免费,无需订阅。

iOS & Android — 即将推出
查看价格