分布式共享只读变量

1.问题

假设有10个分区 那么就有10个Task,但是资源只有一个Executor。
那这样10Task就都会在Executor中执行
image.png

2.使用广播优化

image.png

  1. object Spark05_Bc {
  2. def main(args: Array[String]): Unit = {
  3. val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("ACC5")
  4. val sc: SparkContext = new SparkContext(conf)
  5. val rdd: RDD[(String, Int)] = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3)))
  6. val map: mutable.Map[String, Int] = mutable.Map(("a", 2), ("b", 3), ("c", 3))
  7. val bc: Broadcast[mutable.Map[String, Int]] = sc.broadcast(map) //将map变成共享变量
  8. val mapRDD: RDD[(String, (Int, Int))] = rdd.map({
  9. case (w, c) => {
  10. val i: Int = bc.value.getOrElse(w, 0) // bc.value 获取共享变量
  11. (w, (c, i))
  12. }
  13. }
  14. )
  15. mapRDD.saveAsTextFile("output1")
  16. //mapRDD.collect().foreach(println)
  17. sc.stop()
  18. }
  19. }