什么是广播变量
分布式只读共享变量
首先广播变量是一个调优策略(可以减少数据的传输,也就是数据从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)}