文章目录
一、Spark实战:词频统计
(一)Scala版
1、分步完成词频统计
(1)基于文本文件创建RDD
- 执行命令:
val lines = sc.textFile("/home/test.txt")
(2)按空格拆分作扁平化映射
- 执行命令:
val words = lines.flatMap(_.split(" "))
(3)将单词数组映射成二元组数组
- 执行命令:
val tuplewords = words.map((_, 1))
(4)将二元组数组按键归约
- 执行命令:
val wordcount = tuplewords.reduceByKey(_ + _)
(5)将词频统计结果按次数降序排列
- 执行命令:
val sortwordcount = wordcount.sortBy(_._2, false)
2、一步搞定词频统计
- 执行命令:
sc.textFile("/home/test.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).sortBy(_._2, false).collect.foreach(println)
(二)Python版
1、分步完成词频统计
(1)基于文本文件创建RDD
- 执行命令:
lines = sc.textFile("/home/test.txt")
(2)按空格拆分作扁平化映射
- 执行命令:
words = lines.flatMap(lambda line : line.split(' '))
(3)将单词数组映射成二元组数组
- 执行命令:
tuplewords = words.map(lambda word : (word, 1))
(4)将二元组数组按键归约
- 执行命令:
wordcount = tuplewords.reduceByKey(lambda a, b : a + b)
(5)将词频统计结果按次数降序排列
- 执行命令:
sortwordcount = wordcount.sortBy(lambda wc : wc[1], False)
2、一步搞定词频统计
- 执行命令
python
for line in sc.textFile('/home/test.txt').flatMap(lambda line : line.split(' ')).map(lambda word : (word, 1)).reduceByKey(lambda a, b : a + b).sortBy(lambda tup : tup[1], False).collect():
print(line)
二、实战总结
- 在Spark实战中,我们通过Scala和Python两个版本分别实现了词频统计的功能。首先,我们从文本文件中创建了RDD,然后按空格拆分进行扁平化映射,接着将单词数组映射成二元组数组,之后对二元组数组进行按键归约,最后将词频统计结果按次数降序排列。在分步实现的基础上,我们还可以通过一步命令直接完成整个流程。通过这次实战,我们对Spark的基本操作有了更深入的了解,为后续的学习和实践打下了基础。