5.RDD操作综合实例
1、词频统计
A. 分步骤实现
- 1.准备文件
-
- 下载小说或长篇新闻稿
-
- 上传到hdfs上
- 2.读文件创建RDD
- 3.分词
- 4.标点符号[re.split(pattern,str),flatMap()]
# 导入正则表达式re库,使用re.split分词
# 再次分词,清楚去标点符号后产生的无用数据
-
- 排除大小写lower(),map()
-
- 停用词,可网盘下载stopwords.txt,filter()
# 将停用词文件分词存储到变量中
# 筛选不在停用表中的词
# 筛选前后对比
-
- 长度小于2的词filter()
# 筛选前后对比
- 5.统计词频
# 把单词映射成键值对
# 将key相同的values合并,进行词频统计
data_kv = data_kv.reduceByKey(lambda a,b:a+b)
- 6.按词频排序
# sortBY进行词频排序
# [False: 对values值进行降序处理,并指定区块数量为1,方便查文件]
- 7.输出到文件
# 分别在本地文件和HDFS文件上输出
- 8.查看结果
B. 一句话实现:文件入文件出
# 一句话完成文件需求并保存文件
# 查看结果
C. 和作业2的“二、Python编程练习:英文文本的词频统计 ”进行比较,理解Spark编程的特点。
点击查看代码
在pyspark中读取数据后,经过转换的操作形成RDD对象,进行英文文本的词频统计中,需要用到flatMap进行切分并压平,接着处理切分后的字符串形成新的键值对,在对键值对进行词频统计,接着排序输出;pyspark中有分区块数的概念,是多个任务同时进行。
在python中读取文件后,没有用到flatMap操作,也没有分区块操作,python是按顺序进行各种操作。
所以,pyspark主要是对分布式的数据进行处理,而python是对单数据进行处理。
2、求Top值
- 网盘下载payment.txt文件,通过RDD操作实现选出最大支付额的用户。
# 新建txt文件,将文件传上hdfs
# 对文件进行分词、去标点操作
# 将金额映射成键值对,注意values值为int类型
# 对键值对进行累加统计、排序
# 输出文件
# 查看结果
# 最大支付额的用户为7890用户