大家好啊,这里就不自我介绍了,我们说一下WordCount,也就是词频。大家可能在各种渠道学习数据处理都会是WordCount首当其冲,为什么呢?因为WordCount简单。但是可以很好的形容数据处理和数据统计。今天我们也跟风的讲一讲WordCount,但是呢?我们不是泛泛的讲讲,我们是抱着系统学习的态度开始的。因为实现WordCount的方法有很多,每一种方法都是不同的算子,都会让你有不同的收获。那就开始了哈。
![](https://img-blog.csdnimg.cn/b7979894d88e4c55939455a89bb8ff9d.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zi_5Y235ZWm,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center%29])
一、数据源。
[root@host juana]# touch data.txt
[root@host juana]# vim data.txt
liubei,sunshangxiang,zhaoyun
minyue,guanyu,juyoujin,nakelulu
liubei,libai
libai,guanyu,bailishouyue
二、具体实现。
1、方法1
这是最原始的方法。
object WordCount {
def main(args: Array[String]): Unit = {
// 配置spark环境
val conf = new SparkConf().setMaster("local[*]").setAppName("wc")
// 新建SparkContext
val sc = new SparkContext(conf)
//读取文件
sc.textFile("data/data.txt")
// 扁平化处理
.flatMap(line=>{
line.split(",")})
// 逐个击破
.map(x=>(x,1)).reduceByKey(_+_)
// 逐个输出
.foreach(println)
// 关闭环境
sc.stop()
}
}
output
(liubei,2)
(zhaoyun,1)
(sunshangxiang,1)
(nakelulu,1)
(libai,2)
(juyoujin,1)
(guanyu,2)
(bailishouyue,1)
(minyue,1)
2、方法2
object WordCount {
def main(args: Array[String]): Unit = {
// 配置spark环境
val conf = new SparkConf().setMaster("local[*]").setAppName("wc")
// 新建SparkContext
val sc = new SparkContext(conf)
//读取文件
sc.textFile("data/data.txt")
.flatMap(line => {
line.split(" ")})
.map(data => (data, 1))
.groupBy(_._1)
.map(data=>(data._1, data._2.size))
.foreach(println)
sc.stop()
output
(liubei,2)
(zhaoyun,1)
(sunshangxiang,1)
(nakelulu,1)
(libai,2)
(juyoujin,1)
(guanyu,2)
(bailishouyue,1)
(minyue,1)
3、方法3
object WordCount {
def main(args: Array[String]): Unit = {
// 配置spark环境
val conf = new SparkConf().setMaster("local[*]").setAppName("wc")
// 新建SparkContext
val sc = new SparkContext(conf)
//读取文件
sc.textFile("data/data.txt")
.flatMap(line => {
line.split(" ")})
.map(data