什么是广播变量
分布式只读共享变量
首先广播变量是一个调优策略(可以减少数据的传输,也就是数据从driver传输到executor)
(每一个executor都要传list数据,如果数据太多就很慢,采用广播变量他是一个共享只读变量,可以减少数据传输种量)
下面代码演示的是,不使用能进行shuffle的算子,来减少网络传输,用自定义逻辑实现
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Mysql").setMaster("local[*]")
//创建上下文对象
val sc = new SparkContext(conf)
val rdd1 = sc.makeRDD(List((1,2),(1,2),(2,3)))
val list = List((1,2),(2,3),(3,3))
//可以使用广播变量(减少数据的传输)(每一个executor都要传list数据,如果数据太多就很慢,采
//用广播变量他是一个共享只读变量,可以减少数据传输种量)
//构建广播变量
val broadcast = sc.broadcast(list)
val resultRDD = rdd1.map({
case (key,value) =>{
var v2:Any = null
//使用广播变量
for(t <- broadcast.value){
if (key == t._2){
v2 = t._2
}
}
(key,(value,v2))
}
})
resultRDD.foreach(println)
}