生产常用Spark累加器剖析之三(自定义累加器)
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,思路 & 需求参考IntAccumulatorParam的实现思路(上述文章中有讲):trait AccumulatorParam[T] extends AccumulableParam[T, T]
千家信息网最后更新 2026年11月03日生产常用Spark累加器剖析之三(自定义累加器)
思路 & 需求
参考IntAccumulatorParam的实现思路(上述文章中有讲):
trait AccumulatorParam[T] extends AccumulableParam[T, T] { def addAccumulator(t1: T, t2: T): T = { // addInPlace有很多具体的实现类 // 如果想要实现自定义的话,就得实现这个方法 addInPlace(t1, t2) }}自定义也可以通过这个方法去实现,从而兼容我们自定义的累加器
需求:这里实现一个简单的案例,用分布式的方法去实现随机数
** * 自定义的AccumulatorParam * * Created by lemon on 2018/7/28. */object UniqueKeyAccumulator extends AccumulatorParam[Map[Int, Int]] { override def addInPlace(r1: Map[Int, Int], r2: Map[Int, Int]): Map[Int, Int] = { // ++用于两个集合相加 r1++r2 } override def zero(initialValue: Map[Int, Int]): Map[Int, Int] = { var data: Map[Int, Int] = Map() data }}/** * 使用自定义的累加器,实现随机数 * * Created by lemon on 2018/7/28. */object CustomAccumulator { def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("CustomAccumulator").setMaster("local[2]") val sc = new SparkContext(sparkConf) val uniqueKeyAccumulator = sc.accumulable(Map[Int, Int]())(UniqueKeyAccumulator) val distData = sc.parallelize(1 to 10) val mapCount = distData.map(x => { val randomNum = new Random().nextInt(20) // 构造一个k-v对 val map: Map[Int, Int] = Map[Int, Int](randomNum -> randomNum) uniqueKeyAccumulator += map }) println(mapCount.count()) // 获取到累加器的值 中的key值,并进行打印 uniqueKeyAccumulator.value.keys.foreach(println) sc.stop() }}运行结果如下图:## 思路 & 需求
参考IntAccumulatorParam的实现思路(上述文章中有讲):
trait AccumulatorParam[T] extends AccumulableParam[T, T] { def addAccumulator(t1: T, t2: T): T = { // addInPlace有很多具体的实现类 // 如果想要实现自定义的话,就得实现这个方法 addInPlace(t1, t2) }}自定义也可以通过这个方法去实现,从而兼容我们自定义的累加器
需求:这里实现一个简单的案例,用分布式的方法去实现随机数
** * 自定义的AccumulatorParam * * Created by lemon on 2018/7/28. */object UniqueKeyAccumulator extends AccumulatorParam[Map[Int, Int]] { override def addInPlace(r1: Map[Int, Int], r2: Map[Int, Int]): Map[Int, Int] = { // ++用于两个集合相加 r1++r2 } override def zero(initialValue: Map[Int, Int]): Map[Int, Int] = { var data: Map[Int, Int] = Map() data }}/** * 使用自定义的累加器,实现随机数 * * Created by lemon on 2018/7/28. */object CustomAccumulator { def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("CustomAccumulator").setMaster("local[2]") val sc = new SparkContext(sparkConf) val uniqueKeyAccumulator = sc.accumulable(Map[Int, Int]())(UniqueKeyAccumulator) val distData = sc.parallelize(1 to 10) val mapCount = distData.map(x => { val randomNum = new Random().nextInt(20) // 构造一个k-v对 val map: Map[Int, Int] = Map[Int, Int](randomNum -> randomNum) uniqueKeyAccumulator += map }) println(mapCount.count()) // 获取到累加器的值 中的key值,并进行打印 uniqueKeyAccumulator.value.keys.foreach(println) sc.stop() }}运行结果如下图:
累加器
方法
思路
随机数
需求
两个
分布式
可以通过
文章
案例
结果
得实
参考
运行
常用
剖析
生产
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手冲咖啡和咖啡机区别
云之行互联网科技
科技平台互联网
互联网科技公司的优势
河南真二互联网科技有限公司
互联网与新科技
上海卓越科技 互联网
欧洲十大科技互联网公司
团飞科技与伯堂互联网服务平台
科技与互联网哪个更好
注册互联网科技公司经营范围大全
国大互联网教育科技有限公司工作
燊美集互联网科技有限公司
威龙国际互联网科技公司
2021互联网科技公司排名
每天都有哪些好的互联网科技
互联网科技股为什么大涨
绵阳真晨互联网科技有限公司
互联网大会出现的黑科技
科技美学互联网 艺术
广州万易互联网科技有限公司
互联网属科技
云电互联网科技
上海电发互联网科技有限公司
开启互联网科技时代小说
深圳艾果互联网通讯科技
上海京穆互联网科技有限公司
互联网公司属于科技吗
长沙易易互联网科技有限公司
上海旺乐尼互联网科技有限公司