zoukankan      html  css  js  c++  java
  • Spark 学习笔记之 共享变量

    共享变量:

    共享变量
    通常情况下,当向Spark操作(如map,reduce)传递一个函数时,它会在一个远程集群节点上执行,它会使用函数中所有变量的副本。这些变量被复制到所有的机器上,远程机器上并没有被更新的变量会向驱动程序回传。在任务之间使用通用的,支持读写的共享变量是低效的。尽管如此,Spark提供了两种有限类型的共享变量,广播变量和累加器。

    广播变量
    广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可被用于有效地给每个节点一个大输入数据集的副本。Spark还尝试使用高效地广播算法来分发变量,进而减少通信的开销。

    import org.apache.spark.SparkContext
    import org.apache.spark.broadcast.Broadcast
    import org.apache.spark.rdd.RDD
    import org.apache.spark.sql.SparkSession
    import org.apache.spark.util.LongAccumulator
    object TransformationsDemo {
      def main(args: Array[String]): Unit = {
        val sparkSession = SparkSession.builder().appName("TransformationsDemo").master("local[1]").getOrCreate()
        val sc = sparkSession.sparkContext
    
        testBroadcast(sc)
      }
    
      private def testBroadcast(sc: SparkContext) = {
        val factor = 3
        val factorBroadcast: Broadcast[Int] = sc.broadcast(factor)
        var data = sc.parallelize(Array(1, 2, 3, 4, 5), 2)
        data.map(num => num * factorBroadcast.value).collect().foreach(println)
    
      }
    
    }
    

    运行结果:

    累加器
    累加器是仅仅被相关操作累加的变量,因此可以在并行中被有效地支持。它可以被用来实现计数器和总和。

    import org.apache.spark.SparkContext
    import org.apache.spark.broadcast.Broadcast
    import org.apache.spark.rdd.RDD
    import org.apache.spark.sql.SparkSession
    import org.apache.spark.util.LongAccumulator
    
    object TransformationsDemo {
      def main(args: Array[String]): Unit = {
        val sparkSession = SparkSession.builder().appName("TransformationsDemo").master("local[1]").getOrCreate()
        val sc = sparkSession.sparkContext
    
        testAccumulator(sc)
    
      }
    
      private def testAccumulator(sc: SparkContext) = {
        val sum: LongAccumulator = sc.longAccumulator("My Accumulator")
        var data = sc.parallelize(Array(1, 2, 3, 4, 5), 2)
        data.foreach(num => sum.add(num))
        println(sum.value)
    
      }
    }
    

    运行结果:  

  • 相关阅读:
    巧妙设备MTU的大小,轻松提网速
    BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
    给程序猿简历的一些建议
    servlet的抽取
    BeanUtils工具类
    保存密码操作
    The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
    java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    Wed Nov 01 13:03:16 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended.
    修改web项目的启动页
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7795278.html
Copyright © 2011-2022 走看看