目录

  • 前言
  • 11种方式实现wordcount
    • 方式1:groupBy
    • 方式2:groupByKey
    • 方式3:reduceByKey
    • 方式4:aggregateByKey
    • 方式5:foldByKey
    • 方式6:combineByKey
    • 方式7:countByKey
    • 方式8:countByValue
    • 方式9:reduce
    • 方式10:aggregate
    • 方式11:fold
  • 结语

前言

学习任何一门语言,都是从helloword开始,对于大数据框架来说,则是从wordcount开始,Spark也不例外,作为一门大数据处理框架,在系统的学习spark之后,wordcount可以有11种方式实现,你知道的有哪些呢?还等啥,不知道的来了解一下吧!

扫码进,更快捷:

11种方式实现wordcount

方式1:groupBy

def wordcount(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val mRDD = mapRDD.map((_, 1))val group = mRDD.groupBy(t => t._1)val wordcount = group.mapValues(iter => iter.size)
}

方式2:groupByKey

def wordcount2(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val mRDD = mapRDD.map((_, 1))val group = mRDD.groupByKey()val wordcount = group.mapValues(iter => iter.size)
}

方式3:reduceByKey

def wordcount3(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val mRDD = mapRDD.map((_, 1))val wordcount = mRDD.reduceByKey(_+_)
}

方式4:aggregateByKey

def wordcount4(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val mRDD = mapRDD.map((_, 1))val wordcount = mRDD.aggregateByKey(0)(_+_,_+_)
}

方式5:foldByKey

def wordcount5(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val mRDD = mapRDD.map((_, 1))val wordcount = mRDD.foldByKey(0)(_+_)
}

方式6:combineByKey

def wordcount6(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val mRDD = mapRDD.map((_, 1))val wordcount = mRDD.combineByKey(v => v,(x:Int, y) => x + y,(x:Int, y:Int) => x + y)
}

方式7:countByKey

def wordcount7(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val mRDD = mapRDD.map((_, 1))val wordcount = mRDD.countByKey()
}

方式8:countByValue

def wordcount8(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val mapRDD = rdd.flatMap(_.split(" "))val wordcount = mapRDD.countByValue()
}

方式9:reduce

def wordcount9(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val words = rdd.flatMap(_.split(" "))// word => Map[(word,1)]val mapRDD = words.map(word => {// mutable 操作起来比较方便mutable.Map[String, Long]((word, 1))})// Map 和 Map 聚合val wordcount = mapRDD.reduce((map1, map2) => {map2.foreach {case (word, count) => {val newCount = map1.getOrElse(word, 0L) + countmap1.update(word, newCount)}}map1})println(wordcount)
}

方式10:aggregate

def wordcount10(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val words = rdd.flatMap(_.split(" "))// word => Map[(word,1)]val mapRDD = words.map(word => {// mutable 操作起来比较方便mutable.Map[String, Long]((word, 1))})// Map 和 Map 聚合val wordcount = mapRDD.aggregate(mutable.Map[String, Long]((mapRDD.first().keySet.head,0)))((map1, map2) => {map2.foreach {case (word, count) => {val newCount = map1.getOrElse(word, 0L) + countmap1.update(word, newCount)}}map1}, (map1, map2) => {map2.foreach {case (word, count) => {val newCount = map1.getOrElse(word, 0L) + countmap1.update(word, newCount)}}map1})println(wordcount)
}

方式11:fold

def wordcount11(sc: SparkContext): Unit ={val rdd = sc.makeRDD(List("Hello Scala", "Hello Spark"))val words = rdd.flatMap(_.split(" "))// word => Map[(word,1)]val mapRDD = words.map(word => {// mutable 操作起来比较方便mutable.Map[String, Long]((word, 1))})// Map 和 Map 聚合val wordcount = mapRDD.fold(mutable.Map[String, Long]((mapRDD.first().keySet.head,0)))((map1, map2) => {map2.foreach {case (word, count) => {val newCount = map1.getOrElse(word, 0L) + countmap1.update(word, newCount)}}map1})println(wordcount)
}

结语

以上就是十一种求WordCount的实现方式了!好了,今天就为大家分享到这里了,如果本文对你有帮助的话,欢迎点赞&收藏&分享,这对我继续分享&创作优质文章非常重要。感谢

Spark实现WordCount的11种方式,你知道的有哪些?相关推荐

  1. python 下载文件-Python下载文件的11种方式

    原标题:Python下载文件的11种方式 在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服 ...

  2. 消费者在数学上无望的11种方式

    消费者在数学上无望的11种方式 你走进一家星巴克,看到店里对同一杯咖啡提供两种套餐:第一种是加量33%不加价:第二种是原价降价33%.哪种更好? "它们差不多一样!",如果你和参加 ...

  3. Spark读写Hbase的二种方式对比

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...

  4. Spark提交代码的两种方式

    基于spark1.6测试(虽然很多公司都已经在用2.X了,但是1.6我认为是最经典的版本,CDH最新版本至今默认的spark版本依然是1.6,不过2.X提交方式是基本没有变的) Standalone ...

  5. vue组件传值的11种方式

    不写这篇文章,我自己都不知道我知道的vue组件传值的方式竟然有11种之多,其实静下来想想,常用的也有五六种,先上一张总结图: 1.父组件传给子组件 在子组件里定义一个props,即props:['ms ...

  6. 【Spark】WordCount的多种实现方式

    WordCount的多种实现方式 准备工作 使用groupBy 使用groupByKey 使用reduceByKey 使用aggregateByKey 使用foldByKey 使用combineByK ...

  7. AI对抗冠状病毒爆发的11种方式

    随着COVID-19到达60多个国家/地区,全球病例超过95,500,死亡人数超过3,000,全世界正在尽最大努力避免这场灾难.尽管世卫组织和联合国等组织正在释放资金以促进研究,但许多组织都在寻求人工 ...

  8. Spark创建RDD的四种方式(二):从外部存储(文件)创建 RDD代码示例

    代码示例: package com.zxl.sparkimport org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, Spark ...

  9. Spark创建RDD的四种方式(一):从集合(内存)中创建 RDD代码示例

    从底层代码实现来讲,makeRDD 方法其实就是 parallelize 方法: def makeRDD[T: ClassTag](seq: Seq[T],numSlices: Int = defau ...

最新文章

  1. SAP RETAIL 使用MM41创建的物料不能使用MMSC扩展其存储地点
  2. Python内置函数eval
  3. VTK:网格质量用法实战
  4. xp java配置_WinXP系统Java配置环境变量的方法
  5. python3[进阶]8.对象引用、可变性和垃圾回收
  6. NewCode----句子反转
  7. 如何利用ffmpeg提供的API函数进行多媒体文件的解封装
  8. u盘序列号读取工具_硬盘读写工具
  9. go 协程回调函数 传入参数_ECMAScript 6 入门教程—Generator 函数的异步应用
  10. 哪些NPM仓库更易遭供应链攻击?研究员给出了预测指标
  11. gettype php,gettype
  12. 联想教学用计算机,联想多媒体电子教室解决方案
  13. 知网下载学位论文PDF版本的一个方法
  14. 宏观经济学 马工程教材个人笔记整理
  15. pandas学习-task2
  16. 中钰睿泓分享:设计LOGO的思路和流程
  17. 调用百度AI开放平台实现图片文字识别
  18. 9 Greenplum高级使用
  19. hypot() 函数
  20. Excel 中如何根据单元格内容删除行

热门文章

  1. C#中Winfrom默认输入法的设置方法
  2. Access数据库到Mysql数据库实时更新
  3. c++windows openSSL编译(ActivePerl-5.8.8.822-MSWin32-x86-280952.msi+openssl-1.0.2)
  4. Alpha测试和Beta测试:定义和区别
  5. ubuntu20.04 RTX 8000 安装GPU驱动,CUDA,cuDNN,TensorRT
  6. 极家装修怎么样?擅长装修简约风吗?
  7. 【图形学】CPU 与 GPU
  8. OKR和KPI如何结合使用
  9. 数学建模培训作业(二)
  10. linux中的df和du命令