5.RDD操作综合实例
一、词频统计
A. 分步骤实现
- 1.准备文件
-
- 下载小说或长篇新闻稿

-
- 上传到hdfs上

- 2.读文件创建RDD

- 3.分词

- 4.标点符号re.split(pattern,str),flatMap(),
先导入re然后用re.split分词(\W+会匹配所有非单词字符,(\W+)会返回这些,但我们不需要返回,所以这里用\W+即可)

再分词一遍清除去标点后产生的新的无用数据

-
- 排除大小写lower(),map()

-
- 停用词,可网盘下载stopwords.txt,filter(),

将停用词文件分词储存到变量中

筛选出不在停用表中的词

筛选前后对比

-
- 长度小于2的词filter()

筛选前后对比(因为许多小于2的词在停用表中已经被筛选过了一次了)

- 5.统计词频
先把单词映射成键值对

将key相同的values合并起来,做词频的统计

- 6.按词频排序
用sortBy进行词频的排序(对values值进行降序排序,并且指定区块数量为1,以方便查文件)

- 7.输出到文件
分别输出到本地文件和分布式文件上


- 8.查看结果
查看文件前15条结果是否正确即可


B. 一句话实现:文件入文件出
通过代码结合实现一句话完成词频排序并保存文件

查看文件

C.和作业2的“二、Python编程练习:英文文本的词频统计 ”进行比较,理解Spark编程的特点。
作业二中的python源码
import string
from os import path
with open(r'D:\桌面\countWord\waerdenghu.txt','rb') as input_text:
words = [word.strip(string.punctuation).lower() for word in str(input_text.read()).split()]
words_index = set(words)
count_dict = {index:words.count(index) for index in words_index}
with open(r'D:\桌面\countWord\hwtcount.txt','a+') as output_text:
output_text.writelines('词频统计的结果为:' + '\n')
for word in sorted(count_dict,key=lambda x:count_dict[x],reverse=True):
output_text.writelines('{}--{} times'.format(word,count_dict[word]) + '\n')
input_text.close()
output_text.close()
在spark中读取数据后数据是一条字符串/一行字符串视作一个linus,也叫做一个rdd对象(每个转换算子的操作都会形成新的rdd对象),spark中词频统计需要先用flatMap进行切分并压平,然后处理切分的字符串后形成新的键值对,再对形成的键值对进行词频的统计,然后再排序输出。而在python中,则没有压平等这类操作。而spark中有个特点就是在spark中有着区块数的概念,是多个任务同时进行,而python是按顺序进行的,所以spark主要是对分布式的数据进行处理,而python是对单数据进行处理。
二、求Top值
- 网盘下载payment.txt文件,通过RDD操作实现选出最大支付额的用户。
1.丢弃不合规范的行
- 下载项目,将项目put到分布式系统上

- 读取文件,进行分词操作

- 清洗数据,删除空数据行和缺失数据行

2.支付金额转换为数值型,按支付金额排序
- 然后进行排序

3.取出Top3
- 输出到文件并查看结果后取出top3


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通