Spark实现WordCount的11种方式,你知道的有哪些?
目录
- 前言
- 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种方式,你知道的有哪些?相关推荐
- python 下载文件-Python下载文件的11种方式
原标题:Python下载文件的11种方式 在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服 ...
- 消费者在数学上无望的11种方式
消费者在数学上无望的11种方式 你走进一家星巴克,看到店里对同一杯咖啡提供两种套餐:第一种是加量33%不加价:第二种是原价降价33%.哪种更好? "它们差不多一样!",如果你和参加 ...
- Spark读写Hbase的二种方式对比
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...
- Spark提交代码的两种方式
基于spark1.6测试(虽然很多公司都已经在用2.X了,但是1.6我认为是最经典的版本,CDH最新版本至今默认的spark版本依然是1.6,不过2.X提交方式是基本没有变的) Standalone ...
- vue组件传值的11种方式
不写这篇文章,我自己都不知道我知道的vue组件传值的方式竟然有11种之多,其实静下来想想,常用的也有五六种,先上一张总结图: 1.父组件传给子组件 在子组件里定义一个props,即props:['ms ...
- 【Spark】WordCount的多种实现方式
WordCount的多种实现方式 准备工作 使用groupBy 使用groupByKey 使用reduceByKey 使用aggregateByKey 使用foldByKey 使用combineByK ...
- AI对抗冠状病毒爆发的11种方式
随着COVID-19到达60多个国家/地区,全球病例超过95,500,死亡人数超过3,000,全世界正在尽最大努力避免这场灾难.尽管世卫组织和联合国等组织正在释放资金以促进研究,但许多组织都在寻求人工 ...
- Spark创建RDD的四种方式(二):从外部存储(文件)创建 RDD代码示例
代码示例: package com.zxl.sparkimport org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, Spark ...
- Spark创建RDD的四种方式(一):从集合(内存)中创建 RDD代码示例
从底层代码实现来讲,makeRDD 方法其实就是 parallelize 方法: def makeRDD[T: ClassTag](seq: Seq[T],numSlices: Int = defau ...
最新文章
- SAP RETAIL 使用MM41创建的物料不能使用MMSC扩展其存储地点
- Python内置函数eval
- VTK:网格质量用法实战
- xp java配置_WinXP系统Java配置环境变量的方法
- python3[进阶]8.对象引用、可变性和垃圾回收
- NewCode----句子反转
- 如何利用ffmpeg提供的API函数进行多媒体文件的解封装
- u盘序列号读取工具_硬盘读写工具
- go 协程回调函数 传入参数_ECMAScript 6 入门教程—Generator 函数的异步应用
- 哪些NPM仓库更易遭供应链攻击?研究员给出了预测指标
- gettype php,gettype
- 联想教学用计算机,联想多媒体电子教室解决方案
- 知网下载学位论文PDF版本的一个方法
- 宏观经济学 马工程教材个人笔记整理
- pandas学习-task2
- 中钰睿泓分享:设计LOGO的思路和流程
- 调用百度AI开放平台实现图片文字识别
- 9 Greenplum高级使用
- hypot() 函数
- Excel 中如何根据单元格内容删除行
热门文章
- C#中Winfrom默认输入法的设置方法
- Access数据库到Mysql数据库实时更新
- c++windows openSSL编译(ActivePerl-5.8.8.822-MSWin32-x86-280952.msi+openssl-1.0.2)
- Alpha测试和Beta测试:定义和区别
- ubuntu20.04 RTX 8000 安装GPU驱动,CUDA,cuDNN,TensorRT
- 极家装修怎么样?擅长装修简约风吗?
- 【图形学】CPU 与 GPU
- OKR和KPI如何结合使用
- 数学建模培训作业(二)
- linux中的df和du命令