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

在PySpark中,map()变换与flatMap()变换在功能上有何不同?请说明它们各自的作用及使用场景。

数据技术原理PySpark

考察说明

考察对PySpark中两种常用转换操作的理解,包括其输出结构差异和适用场景。

回答思路

  1. 【回答框架 1】map(func)对RDD或DataFrame的每一行应用函数func,每个输入项产生一个输出项,因此输出分区数量与输入相同,输出的RDD元素数量与输入一致。它适用于一对一的数据转换,比如从每行提取一个字段或进行简单映射。
  2. 【回答框架 2】flatMap(func)同样对每个输入元素应用函数func,但func返回一个可迭代对象(如列表或迭代器),flatMap会将所有返回的迭代对象展平成一个RDD。因此,每个输入项可以产生零个或多个输出项,输出的元素总数可以不同于输入。它适用于一对多或过滤场景,比如拆分句子为单词。
  3. 【回答框架 3】两者的核心区别在于输出粒度:map保持一对一,flatMap支持一对多。选择依据是:若需将每个输入映射为恰好一个输出,使用map;若需将一个输入展开为多个输出或删除某些元素,使用flatMap。
  4. 【回答框架 4】性能方面,两者都是窄依赖转换,不会触发shuffle,但flatMap可能产生更多输出数据,影响后续阶段的计算量,需结合具体数据量和业务逻辑合理选择。
  5. 【关键点 1】map(func)对每个输入项生成一个输出项,保持元素数量不变。
  6. 【关键点 2】flatMap(func)对每个输入项返回可迭代对象并展平,可产生多个输出项。
  7. 【关键点 3】map适用于一对一转换,flatMap适用于一对多或需要过滤的场景。
  8. 【易错点 1】不要混淆flatMap与map的返回值,flatMap必须返回可迭代对象,否则会报错。
  9. 【易错点 2】在DataFrame中使用flatMap时要注意,列结构可能变化,需正确指定输出类型。