广播变量

2020-03-20 271次浏览 已收录 9个评论

广播变量只能在Driver定义,在Executor端使用,不能在Executor端使用,不能在Excutor改变
不能将RDD广播出去,可以将RDD的结果广播出去
如果不使用广播变量在Executor中有多少task,就有多少个Driver端的变量副本,如果使用广播变量,在每个Executor中只有一份Driver端的变量副本

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
object 广播变量 {
  
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("test")
    val sc=new SparkContext(conf)
    
    //下面这种方式占用内存高
//    val blackList=List[String]("zha","long")
//    val rdd1=sc.parallelize(Array("zha","long","xue","wang"))
//    val rdd2=rdd1.filter(s=>{
//      !blackList.contains(s)
//      /*
//      * xue
//      * wang
//      */
//    }).foreach(println)
    

    //使用广播变量
    val blackList=List[String]("zha","long")
    val bclist=sc.broadcast(blackList)
    val rdd1=sc.parallelize(Array("zha","long","xue","wang"))
    val rdd2=rdd1.filter(s=>{
      val list=bclist.value
      !list.contains(s)
      /*
      * xue
      * wang
      */
    }).foreach(println)
    sc.stop()
  }
}


渣渣龙, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:广播变量
喜欢 (0)

您必须 登录 才能发表评论!

(9)个小伙伴在吐槽
  1. 看了那么多博客,就你的能看懂
    hello2020-03-27 12:43
  2. 可以
    中国加油小子2020-03-27 12:44
  3. 可以
    笨鸟先飞2020-03-27 13:09
  4. 我也是学计算机的
    你好2020-03-27 13:35
  5. 最好再详细点
    我也是渣渣2020-03-27 14:01
  6. 还可以
    小白2020-03-28 16:24
  7. 最好再详细点
    渣渣混2020-05-26 09:30
  8. 挺明白的
    你哥2020-05-26 09:56
  9. 小蚯蚓2020-05-26 10:47