5.RDD操作综合实例
1、词频统计
A. 分步骤实现
- 1.准备文件
-
- 下载小说或长篇新闻稿
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401171303819-405490255.png)
-
- 上传到hdfs上
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401171339675-459471089.png)
- 2.读文件创建RDD
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401171420553-370498500.png)
- 3.分词
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401171153736-1355994235.png)
- 4.标点符号[re.split(pattern,str),flatMap()]
# 导入正则表达式re库,使用re.split分词
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401171603180-264380946.png)
# 再次分词,清楚去标点符号后产生的无用数据
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401171732357-261217529.png)
-
- 排除大小写lower(),map()
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401171843080-1984735615.png)
-
- 停用词,可网盘下载stopwords.txt,filter()
# 将停用词文件分词存储到变量中
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401185456254-654826492.png)
# 筛选不在停用表中的词
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401190021374-1582424721.png)
# 筛选前后对比
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401190206269-1344615213.png)
-
- 长度小于2的词filter()
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401190327571-1723883880.png)
# 筛选前后对比
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401190427080-1991896359.png)
- 5.统计词频
# 把单词映射成键值对
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401190626303-1049408397.png)
# 将key相同的values合并,进行词频统计
data_kv = data_kv.reduceByKey(lambda a,b:a+b)
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401191115113-908368525.png)
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401192557927-1591654789.png)
- 6.按词频排序
# sortBY进行词频排序
# [False: 对values值进行降序处理,并指定区块数量为1,方便查文件]
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401192847133-1399638277.png)
- 7.输出到文件
# 分别在本地文件和HDFS文件上输出
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401193625225-284322146.png)
- 8.查看结果
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401193940311-98190942.png)
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220401193959926-1276802742.png)
B. 一句话实现:文件入文件出
# 一句话完成文件需求并保存文件
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402184922945-207276096.png)
# 查看结果
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402185312650-1674414084.png)
C. 和作业2的“二、Python编程练习:英文文本的词频统计 ”进行比较,理解Spark编程的特点。
点击查看代码
在pyspark中读取数据后,经过转换的操作形成RDD对象,进行英文文本的词频统计中,需要用到flatMap进行切分并压平,接着处理切分后的字符串形成新的键值对,在对键值对进行词频统计,接着排序输出;pyspark中有分区块数的概念,是多个任务同时进行。
在python中读取文件后,没有用到flatMap操作,也没有分区块操作,python是按顺序进行各种操作。
所以,pyspark主要是对分布式的数据进行处理,而python是对单数据进行处理。
2、求Top值
- 网盘下载payment.txt文件,通过RDD操作实现选出最大支付额的用户。
# 新建txt文件,将文件传上hdfs
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402182113805-1143345073.png)
# 对文件进行分词、去标点操作
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402182530567-692268803.png)
# 将金额映射成键值对,注意values值为int类型
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402182657948-949908692.png)
# 对键值对进行累加统计、排序
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402182917788-1752300480.png)
# 输出文件
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402183047472-1370858825.png)
# 查看结果
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402183340494-1305526824.png)
# 最大支付额的用户为7890用户
![](https://img2022.cnblogs.com/blog/2764973/202204/2764973-20220402185438764-1123983384.png)