数据岗位面试题更新 2026-08-05

请解释 PySpark 中窗口函数的定义,并说明在实际数据处理中如何运用窗口函数完成聚合、排名等计算任务?

数据编码实现技术原理PySpark

考察说明

考查对 PySpark 窗口函数概念及操作模式的理解。

回答思路

  1. 【回答框架 1】窗口函数基于特定窗口范围对行进行聚合计算,核心由 partitionBy 划分分组、orderBy 定义排序及 rowsBetween/rangeBetween 设定帧范围三部分构成,返回行数与原表一致。
  2. 【回答框架 2】使用时通常配合聚合函数(如 sum、avg)、排名函数(如 row_number、rank、dense_rank)或分析函数(如 lag、lead),通过 select 或 withColumn 添加计算列。
  3. 【回答框架 3】典型步骤:先创建 Window 对象指定分区与排序,再在聚合或排名函数中传入该窗口,最后执行动作算子触发计算,结果追加为新列。
  4. 【回答框架 4】窗口计算在分区内独立进行,避免全局 shuffle 的某些场景,但 partitionBy 仍会触发数据重分布,需结合数据规模合理设置分区数。
  5. 【回答框架 5】注意帧范围对计算行集的限制,以及 orderBy 缺失时默认全部分区作为窗口,确保语义符合预期。
  6. 【关键点 1】窗口函数由 partitionBy、orderBy 和帧范围共同定义
  7. 【关键点 2】支持聚合、排名及偏移分析三类常见用途
  8. 【关键点 3】返回行数与输入一致,适合追加结果列
  9. 【关键点 4】分区和排序直接影响计算边界与性能
  10. 【易错点 1】混淆窗口函数与 groupBy 聚合,后者会压缩行数
  11. 【易错点 2】忽略帧范围导致计算范围与预期不符
  12. 【易错点 3】过度使用全局排序引发性能瓶颈