在spatk中,如果我们想实现所有分片处理时更新共享变量的功能,可以使用什么?

在spatk中,如果我们想实现所有分片处理时更新共享变量的功能,可以使用什么?,第1张

累加器

在创建函数时,如果需要捕获自由变量,那么包含指向被捕获变量的引用的函数就被称为闭包函数。在实际计算时,Spark 会将对 RDD *** 作分解为 Task,Task 运行在 Worker Node 上。在执行之前,Spark 会对任务进行闭包,如果闭包内涉及到自由变量,则程序会进行拷贝,并将副本变量放在闭包中,之后闭包被序列化并发送给每个执行者。因此,当在 foreach 函数中引用 counter 时,它将不再是 Driver 节点上的 counter,而是闭包中的副本 counter,默认情况下,副本 counter 更新后的值不会回传到 Driver,所以 counter 的最终值仍然为零。

内置累加器

自定义累加器new一个之后,方法add之中就行了。

自定义累加器

自定义的累加器需要继承AccumulatorV2并实现以下方法

copy() Creates a new copy of this accumulator.

reset() Resets this accumulator, which is zero value

merge() 分区间的累加器的合并

add()一个分区内的数据的累增

value() 返回当前缓存的值

class MapAcc extends AccumulatorV2[Long,Map[String,Double]]{

private var map: Map[String, Double] = Map[String, Double]()

override def isZero: Boolean = map.isEmpty

override def copy(): AccumulatorV2[Long, Map[String, Double]] = {

val acc = new MapAcc

acc.map=map

acc

}

override def reset(): Unit = map = Map[String, Double]()

override def add(v: Long): Unit = {

// sum求和,count计数

map += "sum" ->(map.getOrElse("sum",0D)+v)

map += "count" ->(map.getOrElse("count",0D)+1)

}

override def merge(other: AccumulatorV2[Long, Map[String, Double]]): Unit = other match {

case o:MapAcc =>

this.map += "sum" ->(this.map.getOrElse("sum",0D)+o.map.getOrElse("sum",0D))

this.map += "count" ->(this.map.getOrElse("count",0D)+o.map.getOrElse("count",0D))

case _ =>throw new UnsupportedOperationException

}

override def value: Map[String, Double] = {

this.map += "avg" ->(this.map.getOrElse("sum",0D)/this.map.getOrElse("count",1D))

map

}

}

调用时new一个分区器,然后使用add方法进行递增

注意:累加器最好用在行动算子之中

广播变量

如果说累加器是共写变量,那么广播变量就是共读变量。广播变量通过调用SparkContext.broadcast(v)来创建.实际是对v的一个包装,广播后在所有的节点上都可以通过.value获得该值。

————————————————

版权声明:本文为CSDN博主「gdgylpc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/resilienter/java/article/details/103937552

数据可视化,是关于数据视觉表现形式的科学技术研究,做大数据开发要会。

其中,这种数据的视觉表现形式被定义为,一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。网舟科技在数据分析与可视化方面有自己独特的见解与心得,专注美国Adobe数据产品的实际应用分析。

它是一个处于不断演变之中的概念,其边界在不断地扩大。主要指的是技术上较为高级的技术方法,而这些技术方法允许利用图形、图像处理、计算机视觉以及用户界面。

通过表达、建模以及对立体、表面、属性以及动画的显示,对数据加以可视化解释。与立体建模之类的特殊技术方法相比,数据可视化所涵盖的技术方法要广泛得多。

扩展资料:

大数据可视化工具的特性:

1、对于数据反映快。用户对于图形等直观的形式认知数据比枯燥的文字信息更加快捷,所以使用图表来总结复杂的数据,可以让数据更快的呈现在人们面前,便于人们对于数据的理解。而且数据可视化程序一般都可以迅速地将实时信息转化为图形信息,这样更加方便企业对整个行业进行评估以及对于企业的实际掌握。

2、易于了解行业。大数据一般而言都包含了大量的企业行业相关数据,很多公司都会把消费者行为数据化,而这种行业大数据又可以反过来为企业带来更多的机会。不过对于这些数据需要这些公司不断的搜集以及不断地分析。通过使用大数据可视化的方式来观察关键指标,这样,就可以更容易发现各种大数据集的市场变化和趋势。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7362997.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存