刘淑婷

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用户

 

 

 

posted on 2022-04-02 14:33  树亭  阅读(85)  评论(0编辑  收藏  举报

导航