第五次作业

Posted on 2022-03-29 22:10  bracee  阅读(31)  评论(0编辑  收藏  举报

一、词频统计

  1. 分步骤实现
  1. 准备文件
  2. 下载小说或长篇新闻稿

上传到hdfs上

hdfs dfs -ls /hdfs

 

 

  1. 读文件创建RDD
lines = sc.textFile(“file:///home/hadoop/ex1_news.txt”)

lines.foreach(print)

 

 

  1. 分词

初次分词:无法分出带有字符的英文字符,需进行再次分词

lines.flatMap(lambda line:line.split()).collect()

 

 

第二次分词:分出带有字符的英文字符

  1. 排除大小写lower(),map()
words1 = words.map(lambda word:word.lower())

words1.collect()

 

 


标点符号re.split(pattern,str),flatMap(),

 

 


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

with open(‘/home/Hadoop/stopwords.txt’) as s:

stops = s.read().split()

 

 

words2 = words1.filter(lambda word:word not in stops).count()words.filter(lambda word:word not in stops).collect()

 

 


长度小于2的词filter()

words=words1.filter(lambda word:len(word)>2)words.collect()

 

 

  1. 统计词频
wordKv = words.map(lambda word:(word,1))

wordKv.collect()

 

 

ww=wordKv.reduceByKey(lambda a,b:a+b)

ww.collect()

 

 

  1. 按词频排序
wwSort=ww.sortBy(lambda ww:ww[1],False,1)

wwSort.collect()

 

 

  1. 输出到文件
out_url = 'huangborui'

wwSort.saveAsTextFile(out_url)

 

 

  1. 查看结果
hdfs dfs -ls

 

 

  1. 一句话实现:文件入文件出
sc.textFile("file:///home/hadoop/ex1_news.txt").flatMap(lambda line: line.split(" ")).map(lambda word: word.lower()).filter(lambda word: word not in stops).filter(lambda word:len(word)>2).map(lambda word:(word,1)).reduceByKey(lambda x,y :x+y).sortBy(lambda wc:wc[1],False,1).saveAsTextFile("file:///home/hadoop/huangborui")

 

 

 

 

二、求Top值

网盘下载payment.txt文件,通过RDD操作实现选出最大支付额的用户。

cat payment.txt

 

 

lines = sc.textFile("file:///home/hadoop/payment.txt")

lines.take(14)

 

 

items = lines.map(lambda line:line.split(','))    //拆分字段

items.collect() 

 

 

 //丢弃空行与字段不完整的行

items.map(lambda item:len(item)).collect()

items.count()

 

//过滤剩下长度为4的字段

item.filter(lambda item:len(item)==4).collect()

 

 

 

 

//丢弃有空值的行

 

 

//有效的记录

 

 

//取前三名

top3 = recs.sortBy(lambda rec:int(rec[2]),False).take(3)