5.RDD操作综合实例

一、词频统计

A. 分步骤实现

 

  1. 准备文件
    1. 下载小说或长篇新闻稿

 

    1. 上传到hdfs上

hdfs dfs -put /home/hadoop/5case.txt ./5case

  1. 读文件创建RDD

lines = sc.textFile("/user/hadoop/5case/5case.txt")

 

  1. 分词

pattern = ''' |,|\.|\’|“|”| '''   |为间隔符    \为防转义符

 words = lines.flatMap(lambda line:re.split(pattern,line))

 

  1. 排除大小写lower(),map()

words.map(lambda word:word.lower())


标点符号re.split(pattern,str),flatMap(),
停用词,可网盘下载stopwords.txt,filter(),

with open("/home/hadoop/stopwords.txt") as stoplines:
     stopwords = stoplines.read().split()

words.filter(lambda words:word not in stopwords)

word.filter(lambda x:x not in stopwords)过滤停顿词


长度小于2的词filter()

word.filter(lambda x:x not in stopwords) 

 

words2.filter(lambda x:len(x)>2) 过滤长度小于2的单词

  1. 统计词频

word = words.map(lambda word:(word,1))

  1. 按词频排序

words.reduceByKey(lambda a,b:a+b)

word4.sortBy(lambda x:x[1],False,1)  ('students', 5)     x[ 1 ]è5  False为降序,True为升序  1为处理存放的块数,默认为10块

  1. 输出到文件

word5.saveAsTextFile("output")

  1. 查看结果

dfs dfs -cat /user/Hadoop/文件所在路径

B. 一句话实现:文件入文件出

 

 

C.和作业2的“二、Python编程练习:英文文本的词频统计 ”进行比较,理解Spark编程的特点,用自己的话进行表达。

  RDD有RDD的方法函数,当RDD.collect()方法出来的列表形式会误认为当成RDD,执行下一命令时就会报错,说列表形式没有sortBy等之类的方法存在,Spark就是把一堆数据放到Rdd里面,通过RDD的底层方法去操作RDD然后输出成列表形式,当然这种方式肯定是比读取硬盘的速度要快,毕竟只是读取内存当中的数据。

 

 

二、求Top值

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

  1. 丢弃不合规范的行:
    • 空行
    • 少数据项
    • 缺失数据
  2. 支付金额转换为数值型,按支付金额排序
  3. 取出Top3

 

   导入文件

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

   内容按照逗号分隔

   itmes = lines.map(lambda line:line.split(','))     不使用mapfilter

   看看每个行的大小

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

   收集内容完整不为空的数据

   temp=itmes.filter(lambda item:len([i for i in item if len(i)>0])==4)   注意最后不要加collect() 否则变成列表  使用take(3)收集前三个数据会报错

 

进行排序后,输出top3

top3=temp.sortBy(lambda tm:int(tm[2].False)).take(3)

 

 

posted on 2022-03-29 19:39  TanHaven  阅读(175)  评论(0)    收藏  举报