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


posted @   Yeav  阅读(290)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示