zoukankan      html  css  js  c++  java
  • spark高级特性--广播变量

    广播变量的好处:

    如果你的算子函数中,使用到了特别大的数据,那么,这个时候,推荐将该数据进行广播。这样的话,就不至于将一个大数据拷贝到每一个task上去。而是给每个节点进程executor拷贝一份,然后节点上的task共享该数据。这样的话,就可以减少大数据在节点上的内存消耗。并且可以减少数据到节点的网络传输消耗。

    使用 广播变量之前,复制map数据和task线程数量相等。

      @Test
      def bc1(): Unit ={
    
        //数据,假装量很大,有一百兆
        val map = Map("spark" -> "http://spark.apache.cn", "scala" -> "http://www.scala-lang.org")
    
        val conf = new SparkConf().setMaster("local[6]").setAppName("BroadCast")
        val sc = new SparkContext(conf)
    
        val rdd1 = sc.parallelize(Seq("spark", "scala"))
    
        val rdd2= rdd1.map(item => map(item)).collect()
    
        rdd2.foreach(println(_))
    
        sc.stop()
      }

    使用 广播变量之后,复制map数据和executor进程数量相等。executor数量远小于task数量,减少数据在节点网络传输的消耗。

      @Test
      def bc2(): Unit ={
    
        val map = Map("spark" -> "http://spark.apache.cn", "scala" -> "http://www.scala-lang.org")
    
        val conf = new SparkConf().setMaster("local[6]").setAppName("BroadCast")
        val sc = new SparkContext(conf)
    
        //创建广播
        val bc = sc.broadcast(map)
    
        val rdd1 = sc.parallelize(Seq("spark", "scala"))
    
        //在算子中使用广播变量代替直接引用集合,只会复制和executor一样的数量
        //在使用广播变量之前,复制map 数是task数量
        //在使用广播以后,复制map数和executor一致
        val rdd2= rdd1.map(item => bc.value(item)).collect()
    
        rdd2.foreach(println(_))
    
        sc.stop()
      }
  • 相关阅读:
    git 创建一个空分支
    github page的两种类型
    hexo-theme-next
    github网页
    Linux下的CPU使用率与服务器负载的关系与区别
    mysql数据库优化日志(更)-howyue
    图片延时加载
    jQuery实现页面滚动时顶部动态显示隐藏
    TCP与UDP区别
    记一次网站服务器迁移(my)
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/13265850.html
Copyright © 2011-2022 走看看