Spark(13):RDD之广播变量和累加器

news/2024/11/20 7:00:07/

目录

0. 相关文章链接

1. 广播变量

2. 累加器

2.1. 实现原理

2.2. 系统累加器

2.3. 自定义累加器


0. 相关文章链接

 Spark文章汇总 

1. 广播变量

        广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。在多个并行操作中使用同一个变量,但是 Spark 会为每个任务分别发送。

val rdd1 = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3), ("d", 4)), 4)
val list = List(("a", 4), ("b", 5), ("c", 6), ("d", 7))// 声明广播变量
val broadcast: Broadcast[List[(String, Int)]] = sc.broadcast(list)
val resultRDD: RDD[(String, (Int, Int))] = rdd1.map {case (key, num) => {var num2 = 0// 使用广播变量for ((k, v) <- broadcast.value) {if (k == key) {num2 = v}}(key, (num, num2))}
}

2. 累加器

2.1. 实现原理

        累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Driver 端进行 merge。

2.2. 系统累加器

val rdd = sc.makeRDD(List(1, 2, 3, 4, 5))
// 声明累加器
var sum = sc.longAccumulator("sum");
rdd.foreach(num => {// 使用累加器sum.add(num)}
)
// 获取累加器的值
println("sum = " + sum.value)

2.3. 自定义累加器

// 自定义累加器
// 1. 继承 AccumulatorV2,并设定泛型
// 2. 重写累加器的抽象方法
class WordCountAccumulator extends AccumulatorV2[String, mutable.Map[String, Long]] {var map: mutable.Map[String, Long] = mutable.Map()// 累加器是否为初始状态override def isZero: Boolean = {map.isEmpty}// 复制累加器override def copy(): AccumulatorV2[String, mutable.Map[String, Long]] = {new WordCountAccumulator}// 重置累加器override def reset(): Unit = {map.clear()}// 向累加器中增加数据 (In)override def add(word: String): Unit = {// 查询 map 中是否存在相同的单词// 如果有相同的单词,那么单词的数量加 1// 如果没有相同的单词,那么在 map 中增加这个单词map(word) = map.getOrElse(word, 0L) + 1L}// 合并累加器override def merge(other: AccumulatorV2[String, mutable.Map[String, Long]]): Unit = {val map1 = mapval map2 = other.value// 两个 Map 的合并map = map1.foldLeft(map2)((innerMap, kv) => {innerMap(kv._1) = innerMap.getOrElse(kv._1, 0L) + kv._2innerMap})}// 返回累加器的结果 (Out)override def value: mutable.Map[String, Long] = map}

注:其他Spark相关系列文章链接由此进 ->  Spark文章汇总 



http://www.ppmy.cn/news/789016.html

相关文章

华为mate20 android,华为Mate20全曝光,可能是最后一个版本

原标题&#xff1a;华为Mate20全曝光&#xff0c;可能是最后一个版本 要说现在能够坐稳国内智能手机高端市场的厂商&#xff0c;除了三星苹果恐怕就要数华为了。现在的华为&#xff0c;已经形成P系列和Mate系列两款中高端系列&#xff0c;再往下则又有荣耀系列与小米魅族这样的…

mate20pro怎样装鸿蒙系统,华为放大招!华为Mate20系列也能拍月亮,以后还能升级鸿蒙...

上半年国内手机市场的新机数量明显减少&#xff0c;但也出现了一些可喜的变化&#xff0c;比如一加7 Pro使用2K分辨率90Hz刷新的屏幕&#xff0c;比如低亮度无频闪的DC调光。相比前一项&#xff0c;DC调光更值得关注&#xff0c;因为这是在网友的驱动下出现的改变。 支持DC调光…

mate20 X5G版即将上市,但mate30才更值得期待

华为的mate20 X5G版已获得3C认证&#xff0c;意味着它即将在国内上市&#xff0c;成为华为首款在国内上市的5G手机&#xff0c;不过这款手机是采用外挂5G基带的方式支持5G&#xff0c;在技术上并不太成熟&#xff0c;可能存在不稳定、功耗过大等问题&#xff0c;而更成熟的5G手…

实测华为Mate 20 Pro:配备麒麟980芯片后AI到底有多强

三井 发自 凹非寺 量子位 报道 | 公众号 QbitAI 这是一个发布新手机必谈AI的时代。 也是一个需要测过才知道AI行不行的时代。 前不久&#xff0c;华为发布了新一代旗舰手机Mate 20系列。配备AI芯片麒麟980&#xff0c;双NPU&#xff0c;号称六项业界第一。 而且&#xff0c;余承…

realme GT2 Pro对比小米12哪个好

首先在性能方面&#xff0c;虽然二者都是高通骁龙8处理平台&#xff0c;但是在性能释放上面&#xff0c;realme GT2 Pro则更加激进一些&#xff0c;这样子的好处就是玩那些比较耗费资源的游戏的时候&#xff0c;realme GT2 Pro有更高的帧率表现&#xff0c;不过代价就是手机有更…

鸿蒙系统mate20能用吗啊,鸿蒙系统mate20可以更新吗

就在这几天&#xff0c;鸿蒙系统在网上突然大热&#xff0c;很多使用华为的朋友都参与测试并且更新了这款系统。但是并不是所有的华为手机目前都可以更新鸿蒙系统&#xff0c;其中就包括mate20等。下面就一起来看看哪些手机可以更新吧。 鸿蒙系统mate20可以更新吗 答&#xff1…

红米Note12T Pro对决红米Note12 Turbo:相差200元谁更值得买

在介绍这两款产品的时候&#xff0c;真怕手滑把产品名字写错了。在今年618前夕&#xff0c;红米Note12T Pro上市。这款手机堪称是高性价比机型&#xff0c;以最低1699元的价格给配上了天玑8200-Ultra芯片&#xff0c;而且起步就是8GB256GB。不过这款产品也让一些小伙伴纠结&…

华为Mate20 Pro破欧洲销量记录?真香~

华为这两年的快速发展是大众有目共睹的&#xff0c;凭借着强大的科研能力和全面发展的战略&#xff0c;华为在出货量方面是一再创下新高&#xff0c;根据最新公布的相关数据&#xff0c;华为在今年第三季度全球出货量达到了5200万台&#xff0c;相比去年同期出货量大涨了33%&am…