广播变量:
- 如果使用了广播变量技术,则 Driver 端将共享数据只会发送到每个 Executor 一份。Executor 中的所有 Task 都复用这个对象。
- 如果不用广播变量技术,则 Driver 端默认会将共享数据分发到每个 Task 中,造成网络分发压力大。甚至导致你在进行RDD持久化到内存时,因内存不足而被迫存到磁盘,增加了磁盘IO,严重降低性能。
广播变量使用方法(Python实现):
-
要保证该共享对象是可序列化的。因为跨节点传输的数据都要是可序列化的。
-
在Driver端将共享对象广播到每个Executor:
#2-定义一个列表,装特殊字符 list_v=[",", ".", "!", "#", "$", "%"] #3-将列表从Driver端广播到各个Executor中 bc=sc.broadcast(list_v)
- 在Executor中获取:
list2=bc.value