在 PySpark 中,广播变量(Broadcast Variable)的定义是什么?它主要用于解决什么问题?
考察说明
考查对 PySpark 广播变量概念及用途的理解
回答思路
- 【回答框架 1】广播变量是 PySpark 提供的一种只读变量,它会在每个 executor 上缓存一份副本,而不是在每次任务中与数据一起传输。其核心作用是当多个任务需要共享一个较大的只读数据集(如查找表、配置信息)时,避免在每个任务中重复序列化和网络传输该数据,从而显著减少网络 I/O 和集群通信开销。
- 【回答框架 2】广播变量的典型使用场景是当一个较大的只读对象(例如维度表、字典数据)需要与 RDD 或 DataFrame 中的每条记录进行 join 或查找操作时。例如,在小表 join 大表时,可以将小表广播到每个 executor,避免频繁的 shuffle 操作,提升任务执行效率。
- 【回答框架 3】广播机制是通过高效的广播算法(如 tree broadcast)将数据分发到各 executor,每个 executor 只保存一份副本,所有任务共享,而不是每个任务拷贝一份。广播变量是只读的,不能被修改,但可以访问其 value 属性获取原始数据。
- 【回答框架 4】使用广播变量时需要权衡内存消耗:广播的数据会驻留在每个 executor 的内存中,如果广播数据过大或 executor 数量众多,可能导致内存溢出。因此,广播变量适合数据量适中且需被多次复用的场景。
- 【关键点 1】广播变量是只读的共享变量,在 executor 上缓存副本。
- 【关键点 2】主要用于避免大对象在任务间重复传输,减少网络开销。
- 【关键点 3】适合小表 join 大表,减少 shuffle。
- 【关键点 4】广播变量存储在 executor 内存中,需关注内存占用。
- 【易错点 1】广播变量并非实时更新,若底层数据变化需重新广播。
- 【易错点 2】过度使用广播变量或广播过大的数据集可能导致内存溢出。
- 【易错点 3】广播变量只保证数据分发,不提供分布式锁或一致性保证。