5.RDD操作综合实例
一、词频统计
A.分步骤实现
1.准备文件
- 下载小说或者长篇新闻稿
- 上传到hdfs上
hdfs dfs -put /usr/local/pythonspace/noval.txt /pythonspace/02/noval.txt
2.读文件创建RDD
>>> noval = sc.textFile("/pythonspace/02/noval.txt")
>>> noval.collect()
3.排除标点符号
>>> import re
>>> pattern = ",|\.|\'|\"|\/|\ "
>>> words = noval.flatMap(lambda line : re.split(pattern,line))
>>> words.collect()
4.分词
>>> words = words.flatMap(lambda word : word.split(" "))
>>> words.collect()
5.排除大小,排除停用词,排除长度小于2的词
排除大小写
>>> words = words.map(lambda word : word.lower())
>>> words.collect()
排除停用词
>>> with open('/usr/local/pythonspace/stopwords.txt') as f:
... stop = f.read().split()
...
>>> stop
>>> words = words.filter(lambda word : word not in stops)
>>> words.collect()
排除长度小于2的词
>>> words.filter(lambda word : len(word) > 2)
PythonRDD[17] at RDD at PythonRDD.scala:53
>>> words.collect()
6.统计词频
封装成元组
>>> wordmap = words.map(lambda word:(word,1))
>>> wordmap.collect()
开始统计
>>> wordcount = wordmap.reduceByKey(lambda a,b:a + b)
>>> wordcount.collect()
7.按照词频进行排序
>>> wcSort=wordmap.sortBy(lambda wc:wc[1],False,1)
>>> wcSort.collect()
8.输出到文件
>>> url = '/pythonspace/02/sortext'
>>> wcSort.saveAsTextFile(url)
9.查看结果
hdfs dfs -ls /pythonspace/02/sortext
hdfs dfs -cat /pythonspace/02/sortext/part-00000
B. 一句话实现:文件入文件出
C.和作业2的“二、Python编程练习:英文文本的词频统计 ”进行比较,理解Spark编程的特点。
1.首先第一点就是速度快
,spark使用DAG 调度器、查询优化器和物理执行引擎,能够在批处理和流数据获得很高的性能。
2. 第二就是使用简单
————Spark的易用性主要体现在两个方面。一方面,我们可以用较多的编程语言来写我们的应用程序
3.第三就是通用性高
,我们可以很容易地在同一个应用中将一些常用的库结合起来使用,以满足我们的实际需求。
4.第四就是它可以在很多环境上都可以运行
,它可以运行在Hadoop,Mesos,Kubernetes,standalone,或者云服务器上,并且它有多种多种访问源数据的方式。
二、求TOP值
预处理
数据按照逗号来进行分割
1.丢弃不合规范的行:
去除数据中的空行
流程:统计每一行数据的长度看是否等于4
去除数据中缺少数据项的行
流程:统计每一行中的长度不为0的数据,并将这些数据长度用一个列表记录下来,判断这个列表的长度是否等于4
补充知识点:快速生成指定规律的数据
print([i for i in range(1, 11)])
print([i*2 for i in range(1, 11)])
print([i*i for i in range(1, 11)])
print([str(i) for i in range(1, 11)])
print([i for i in range(1, 11) if i % 2 == 0])
2.按支付金额排序
流程:先将记录中第三个字段转化为int类型再进行排序