7.spark共享变量

作者: 全能程序猿 | 来源:发表于2017-07-23 15:13 被阅读21次

spark共享变量


1 Why Apache Spark
2 关于Apache Spark
3 如何安装Apache Spark
4 Apache Spark的工作原理
5 spark弹性分布式数据集
6 RDD持久性
7 spark共享变量
8 Spark SQL
9 Spark Streaming

原文链接:http://blogxinxiucan.sh1.newtouch.com/2017/07/23/spark%E5%85%B1%E4%BA%AB%E5%8F%98%E9%87%8F/

Accumulators

Spark提供了一种非常方便的方法,通过提供累加器来避免可变计数器和计数器同步问题。累加器在具有默认值的Spark上下文中初始化。这些累加器在从站节点上可用,但从站节点无法读取它们。他们唯一的目的是获取原子更新并将其转发给Master。Master是唯一可以读取和计算所有更新的聚合的程序。例如,假设我们想要在日志级别“错误”的日志文件中查找语句的数量...

akuntamukkala@localhost~/temp$ cat output.log
error
warning
info
trace
error
info
info
scala> val nErrors=sc.accumulator(0.0)
scala> val logs = sc.textFile(“/Users/akuntamukkala/temp/output.log”)
scala> logs.filter(_.contains(“error”)).foreach(x=>nErrors+=1)
scala> nErrors.value
Result:Int = 2

广播变量

在RDD上执行加入操作以通过某个密钥合并数据是很常见的。在这种情况下,很可能将大型数据集发送到从属节点,从属节点将托管要连接的分区。这表现出巨大的性能瓶颈,因为网络I / O比RAM访问慢100倍。为了减轻这个问题,Spark提供了广播变量,顾名思义,广播变量被广播到从节点。节点上的RDD操作可以快速访问广播变量值。例如,假设我们要计算文件中所有订单项的运费。我们有一个静态查找表来指定每种运输类型的成本。该查找表可以是广播变量。

akuntamukkala@localhost~/temp$ cat packagesToShip.txt ground
express
media
priority
priority
ground
express
media
scala> val map = sc.parallelize(Seq((“ground”,1),(“med”,2), (“priority”,5),(“express”,10))).collect().toMap
map: scala.collection.immutable.Map[String,Int] = Map(ground -> 1, media -> 2, priority -> 5, express -> 10)
scala> val bcMailRates = sc.broadcast(map)

在上述命令中,我们创建一个广播变量,一个包含按服务类别的成本的地图。

<p>scala> val pts = sc.textFile(“/Users/akuntamukkala/temp/packagesToShip.txt”)</p>

<p>scala> pts.map(shipType=>(shipType,1)).reduceByKey(_+_). map{case (shipType,nPackages)=>(shipType,nPackages*bcMailRates. value(shipType))}.collect()</p>

在上面的命令中,我们通过从广播变量查询邮寄率来计算运输成本。

Array[(String, Int)] = Array((priority,10), (express,20), (media,4), (ground,2))
scala> val shippingCost=sc.accumulator(0.0)
scala> pts.map(x=>(x,1)).reduceByKey(_+_).map{case (x,y)=>(x,y*bcMailRates.value(x))}.foreach(v=>shippingCost+=v._2) scala> shippingCost.value
Result: Double = 36.0
</p>

在上面的命令中,我们使用累加器来计算总成本。以下演示文稿提供了更多信息:

http://ampcamp.berkeley.edu/wp-content/uploads/2012/06/matei-zaharia-amp-camp-2012-advanced-spark.pdf


公众号:it全能程序猿


相关文章

  • 7.spark共享变量

    spark共享变量 1 Why Apache Spark2 关于Apache Spark3 如何安装Apache ...

  • volatile

    作用 只能保证共享变量的可见性,不能保证共享变量操作的原子性。 原理 线程: A B C ,共享变量:s 例:三...

  • Spark共享变量

    共享变量分类 共享变量官网解释 Normally, when a function passed to a Spa...

  • 共享变量

    共享变量 Spark一个非常重要的特性就是共享变量。 默认情况下,如果在一个算子的函数中使用到了某个外部的变量,那...

  • ThreadLocal模式

    多个线程同时读写同一个共享变量存在并发问题。其实可以突破共享变量,没有共享变量就不会有并发问题。没有共享,就没有伤...

  • 共享变量:广播变量

    一、使用场景如果我们要在分布式计算里面分发大对象(如:字典,集合,黑白名单等),由Driver端进行分发。如果这个...

  • Spark-broadcast

    参见Spark相关--共享变量-广播变量-broadcast

  • JMM之Synchronized&Volatile

    内存可见性 可见性:如果一个线程对共享变量值的修改,能够及时的被其他线程看到,那么这个共享变量就是可见的 共享变量...

  • ThreadLocal源码

    ThreadLocal( 线程局部变量 ) 在线程之间共享变量是存在风险的,有时可能要避免共享变量,使用 Thre...

  • 多线程获取返回值

    1.共享变量 将要保存/修改的值set到共享变量中,通过获取共享变量实现值在不同线程中的传递 如下在子线程中循环累...

网友评论

    本文标题:7.spark共享变量

    本文链接:https://www.haomeiwen.com/subject/tjrmkxtx.html