1.累加器


| object AccCode { |
| def main(args: Array[String]): Unit = { |
| val sparkConf = new SparkConf().setMaster("local[2]").setAppName("sum") |
| val sc = new SparkContext(sparkConf) |
| val accumulator = sc.longAccumulator("word_seconds") |
| val rdd:RDD[String] = sc.textFile("hdfs://node1:9000/wc.txt") |
| val flatmap = rdd.flatMap((line: String) => { |
| val wordArray = line.split(" ") |
| accumulator.add(wordArray.length) |
| wordArray |
| }) |
| flatmap.collect() |
| |
| println(s"RDD中一共有 ${accumulator.value} 个单词") |
| sc.stop() |
| } |
| } |
2. 自定义累加器
| package accumulator |
| |
| import org.apache.spark.util.AccumulatorV2 |
| |
| |
| |
| |
| |
| |
| class MyAccumulator extends AccumulatorV2[Int, Int] { |
| |
| var sum: Int = 0 |
| |
| |
| |
| |
| |
| override def isZero: Boolean = { |
| if (sum == 0) { |
| true |
| } else { |
| false |
| } |
| } |
| |
| |
| |
| |
| |
| |
| |
| override def copy(): AccumulatorV2[Int, Int] = { |
| val myAccumulator = new MyAccumulator() |
| myAccumulator.sum = sum |
| myAccumulator |
| } |
| |
| |
| |
| |
| override def reset(): Unit = { |
| sum = 0 |
| } |
| |
| |
| |
| |
| |
| override def add(v: Int): Unit = { |
| sum += v |
| } |
| |
| |
| |
| |
| |
| |
| override def merge(other: AccumulatorV2[Int, Int]): Unit = { |
| val accumulator = other.asInstanceOf[MyAccumulator] |
| sum = sum + accumulator.sum |
| } |
| |
| |
| |
| |
| |
| override def value: Int = { |
| sum |
| } |
| } |
| object AccCode { |
| def main(args: Array[String]): Unit = { |
| val sparkConf = new SparkConf().setMaster("local[2]").setAppName("sum") |
| val sc = new SparkContext(sparkConf) |
| |
| |
| val accumulator = new MyAccumulator() |
| sc.register(accumulator) |
| val rdd:RDD[String] = sc.textFile("hdfs://node1:9000/wc.txt") |
| val flatmap = rdd.flatMap((line: String) => { |
| val wordArray = line.split(" ") |
| accumulator.add(wordArray.length) |
| wordArray |
| }) |
| flatmap.collect() |
| |
| println(s"RDD中一共有 ${accumulator.value} 个单词") |
| sc.stop() |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?