分布式共享只读变量
1.问题
假设有10个分区 那么就有10个Task,但是资源只有一个Executor。
那这样10Task就都会在Executor中执行
2.使用广播优化
object Spark05_Bc {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("ACC5")
val sc: SparkContext = new SparkContext(conf)
val rdd: RDD[(String, Int)] = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3)))
val map: mutable.Map[String, Int] = mutable.Map(("a", 2), ("b", 3), ("c", 3))
val bc: Broadcast[mutable.Map[String, Int]] = sc.broadcast(map) //将map变成共享变量
val mapRDD: RDD[(String, (Int, Int))] = rdd.map({
case (w, c) => {
val i: Int = bc.value.getOrElse(w, 0) // bc.value 获取共享变量
(w, (c, i))
}
}
)
mapRDD.saveAsTextFile("output1")
//mapRDD.collect().foreach(println)
sc.stop()
}
}