Python面试题更新 2026-08-05

请说明在 PySpark 中把 Python 列表转换成 RDD 的操作方式,并解释其内部机制。

数据性能优化技术原理PySparkPython

考察说明

考查对 PySpark RDD 创建方式及底层数据流转的理解。

回答思路

  1. 【回答框架 1】使用 SparkContext 的 parallelize 方法,例如 sc.parallelize(list),即可将 Python 列表转换为 RDD。该方法会将列表中的数据分区,分布到集群的多个执行器上,便于并行处理。
  2. 【回答框架 2】parallelize 的第二个参数 numSlices 可以指定分区数,默认分区数取决于集群配置或 Spark 的默认并行度。分区数会影响并行度和后续操作的性能,合理设置可提升效率。
  3. 【回答框架 3】转换后的 RDD 是弹性分布式数据集,具有容错性,通过血缘关系(lineage)记录转换历史,在分区丢失时可重新计算。
  4. 【回答框架 4】parallelize 将数据从驱动程序发送到各执行器,数据会序列化后传输,因此列表数据量过大时可能导致内存和网络开销增加。
  5. 【回答框架 5】对于需要反复使用的数据,可以通过 persist 或 cache 将 RDD 缓存到内存或磁盘,减少重复计算。
  6. 【关键点 1】使用 sc.parallelize(list) 创建 RDD,可指定分区数。
  7. 【关键点 2】RDD 具有分布式、容错和惰性求值特性。
  8. 【关键点 3】数据从驱动节点分发到执行器,需考虑序列化和网络开销。
  9. 【易错点 1】不要用 sc.parallelize 处理超大列表,可能造成驱动程序内存溢出或网络瓶颈。
  10. 【易错点 2】分区数过多会增加调度开销,过少则无法充分利用并行能力,需根据数据量和集群资源调整。
  11. 【易错点 3】parallelize 创建的 RDD 是内存中的,程序结束后不会持久化,若需长期保留应保存至外部存储。