莎士比亚文集词频统计并行化算法

声明:本博客内容由本人经过实验楼实验得来。

题目描述

在给定的莎士比亚文集上(多个文件),根据规定的停词表,统计出现频率最高的 100 个单词。所谓的停词表,即在词表中的词语并不统计他的频率。

莎士比亚文集中具有多个章节,因此需要用到并行化的方法,这里使用Spark进行处理。

数据下载

# 莎士比亚文集:
wget http://labfile.oss.aliyuncs.com/courses/456/shakespear.zip
# 停词表:
wget http://labfile.oss.aliyuncs.com/courses/456/stopword.txt

编程模型

Spark上开发的应用程序都是由一个driver programe构成,这个所谓的驱动程序在Spark集群通过跑main函数来执行各种并行操作。集群上的所有节点进行并行计算需要共同访问一个分区元素的集合,这就是RDD(RDD resilient distributed dataset)弹性分布式数据集。RDD可以存储在内存或磁盘中,具有一定的容错性,可以在节点宕机重启后恢复。RDD可以从文件系统或HDFS中的文件创建,也可以从Scala或Python集合中创建。

主要针对RDD进行各种操作,程序中的步骤:

提取数据到RDD中,在本实验中我们将莎士比亚文集和停词表文件转换成RDD
1. 转换(transformations)操作:将已存在的数据集转换成新的数据集,例如map。转换是惰性的,不会立刻计算结果,仅仅记录转换操作应用的目标数据集,当动作需要一个结果时才计算。在本实验中我们需要转换文集RDD和停词表RDD。
2. 动作(actions) :数据集计算后返回一个值给驱动程序,例如reduce。本实验中需要对统计词频map的结果进行reduce操作。

程序实现

读入文件:
# 打开pyspark
[yqtao@localhost ~]$ pyspark
# 读入数据
>>> inputFiles = "/home/yqtao/bigdata/shakespear/*"
>>> stopWordFile = "/home/yqtao/bigdata/stopword.txt"
# 创建RDD文件
>>> inputRDD = sc.textFile(inputFiles)
>>> stopRDD = sc.textFile(stopWordFile)
处理特殊符号

输入的文件内容里除了英文单词之外,还有下面的特殊符号,这些符号不应该计算到统计中。

  • 制表符
  • 反斜线
  • 句号
  • 逗号
  • 竖线 |
  • 中括号
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值