
在创建函数时,如果需要捕获自由变量,那么包含指向被捕获变量的引用的函数就被称为闭包函数。在实际计算时,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、易于了解行业。大数据一般而言都包含了大量的企业行业相关数据,很多公司都会把消费者行为数据化,而这种行业大数据又可以反过来为企业带来更多的机会。不过对于这些数据需要这些公司不断的搜集以及不断地分析。通过使用大数据可视化的方式来观察关键指标,这样,就可以更容易发现各种大数据集的市场变化和趋势。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)