object Test {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount")
val sc: SparkContext = new SparkContext(sparkConf)
val rdd1 = sc.makeRDD(List(
("a",1),("b",2),("c",3)
))
//结构转换的思路,无所不可用!!!
//但这样的思路也不好,因为闭包数据是以task为单位发送的,
//一个executor可以包含多个task,当闭包数据量过大时就会导致大量内存占用
val map2= mutable.Map(("a",1),("b",2),("c",3))
val bc: Broadcast[mutable.Map[String, Int]] = sc.broadcast(map2)
rdd1.map {
case (w, c) => {
//方法广播变量
val l = bc.value.getOrElse(w, 0)
(w, (c, l))
}
}.collect().foreach(println)
}
}