[spark案例学习] 单词计数
数据准备
数据下载:《莎士比亚全集》
我们先来看看原始数据:首先将数据加载到RDD,然后显示数据框的前15行。
shakespeareDF = sqlContext.read.text(fileName)
shakespeareDF.show(15, truncate=False)
输出如下:
+-------------------------------------------------------+
|value |
+-------------------------------------------------------+
|1609 |
| |
|THE SONNETS |
| |
|by William Shakespeare |
| |
| |
| |
| 1 |
| From fairest creatures we desire increase, |
| That thereby beauty's rose might never die, |
| But as the riper should by time decease, |
| His tender heir might bear his memory: |
| But thou contracted to thine own bright eyes, |
| Feed'st thy light's flame with self-substantial fuel,|
+-------------------------------------------------------+
数据清洗
因为原始数据包括标点符号,大小写字符,空行。所以我们需要对数据进行清洗。所以我提供了一个removePunctuation函数。这个函数将去掉了标点,删除了句子两端的多余的空格,并将字符全部转换为小写。
from pyspark.sql.functions import regexp_replace, trim, lower
def removePunctuation(column):
return lower(trim(regexp_replace(column, '[^\w\s]', '')))
为了使用这个函数,我们先来看一个例子。
sentenceDF = (sqlContext
.createDataFrame([('Hi, you!',),
(' No under_score!',),
(' * Remove punctuation then spaces * ',)], ['sentence']))
sentenceDF.show(truncate=False)
原始的数据框输出如下:
+------------------------------------------+
|sentence |
+------------------------------------------+
|Hi, you! |
| No under_score! |
| * Remove punctuation then spaces * |
+------------------------------------------+
接下来使用removePunctuation进行清洗。
from pyspark.sql.functions import col
(sentenceDF
.select(removePunctuation(col('sentence')).alias('sentence'))
.show(truncate=False))
清洗后的数据框输出如下:
+------------------------------+
|sentence |
+------------------------------+
|hi you |
|no under_score |
|remove punctuation then spaces|
+------------------------------+
有了这个函数,我们就能对《莎士比亚全集》进行清洗了,首先将shakespeare.txt加载到RDD,并使用removePunctuation函数对数据进行清洗.
from pyspark.sql.functions import col
fileName = "shakespeare.txt"
shakespeareDF = (sqlContext
.read
.text(fileName)
.select(removePunctuation(col('value')).alias('value')))
shakespeareDF.show(15, truncate=False)
清洗后的数据框输出如下:
+-------------------------------------------------+
|value |
+-------------------------------------------------+
|1609 |
| |
|the sonnets |
| |
|by william shakespeare |
| |
| |
| |
|1 |
|from fairest creatures we desire increase |
|that thereby beautys rose might never die |
|but as the riper should by time decease |
|his tender heir might bear his memory |
|but thou contracted to thine own bright eyes |
|feedst thy lights flame with selfsubstantial fuel|
+-------------------------------------------------+
接下来,我们使用split函数分隔每一行的句子,然后用explode函数将行转列,得到一个包括所有单词的数据框,最后使用where函数过滤掉数据框的空行。
from pyspark.sql.functions import split, explode
shakeWordsDF = (shakespeareDF
.select(explode(split(shakespeareDF.value, ' ')).alias('word'))
.where("word<>''"))
shakeWordsDF.show()
shakeWordsDFCount = shakeWordsDF.count()
print shakeWordsDFCount
转换后的数据框输出如下:
+-----------+
| word|
+-----------+
| 1609|
| the|
| sonnets|
| by|
| william|
|shakespeare|
| 1|
| from|
| fairest|
| creatures|
| we|
| desire|
| increase|
| that|
| thereby|
| beautys|
| rose|
| might|
| never|
| die|
+-----------+
数据统计
为了统计单词数,我提供一个wordCount函数,它作用是按单词进行分组,然后统计各个分组中单词的个数,最后返回包含word和count列的数据框。
def wordCount(wordListDF):
return wordListDF.groupBy('word').count()
先来看一个使用wordCount函数的例子:
wordsDF = (sqlContext
.createDataFrame([('cat',), ('elephant',), ('rat',), ('rat',), ('cat', )], ['word']))
wordCount(wordsDF).show()
wordCount(words)
wordCount函数返回的数据框输出如下:
+--------+-----+
| word|count|
+--------+-----+
| cat| 2|
| rat| 2|
|elephant| 1|
+--------+-----+
接下来使用wordCount函数统计《莎士比亚全集》的单词数,然后按照count列降序排列。
from pyspark.sql.functions import desc
topWordsAndCountsDF = wordCount(shakeWordsDF).orderBy(desc('count'))
topWordsAndCountsDF.show()
排序后的数据框输出如下所示
+----+-----+
|word|count|
+----+-----+
| the|27361|
| and|26028|
| i|20681|
| to|19150|
| of|17463|
| a|14593|
| you|13615|
| my|12481|
| in|10956|
|that|10890|
| is| 9134|
| not| 8497|
|with| 7771|
| me| 7769|
| it| 7678|
| for| 7558|
| be| 6857|
| his| 6857|
|your| 6655|
|this| 6602|
+----+-----+
总结
可以看到,出现次数较多的单词大都是停用词。
[spark案例学习] 单词计数的更多相关文章
- hadoop笔记之MapReduce的应用案例(WordCount单词计数)
MapReduce的应用案例(WordCount单词计数) MapReduce的应用案例(WordCount单词计数) 1. WordCount单词计数 作用: 计算文件中出现每个单词的频数 输入结果 ...
- 大数据学习——Storm学习单词计数案例
需求:计算单词在文档中出现的次数,每出现一次就累加一次 遇到的问题 这个问题是<scope>provided</scope>作用域问题 https://www.cnblogs. ...
- [spark案例学习] WEB日志分析
数据准备 数据下载:美国宇航局肯尼迪航天中心WEB日志 我们先来看看数据:首先将日志加载到RDD,并显示出前20行(默认). import sys import os log_file_path =' ...
- Storm入门2-单词计数案例学习
[本篇文章主要是通过一个单词计数的案例学习,来加深对storm的基本概念的理解以及基本的开发流程和如何提交并运行一个拓扑] 单词计数拓扑WordCountTopology实现的基本功能就是不停地读入 ...
- Spark学习笔记1——第一个Spark程序:单词数统计
Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...
- Spark: 单词计数(Word Count)的MapReduce实现(Java/Python)
1 导引 我们在博客<Hadoop: 单词计数(Word Count)的MapReduce实现 >中学习了如何用Hadoop-MapReduce实现单词计数,现在我们来看如何用Spark来 ...
- Spark基础学习精髓——第一篇
Spark基础学习精髓 1 Spark与大数据 1.1 大数据基础 1.1.1 大数据特点 存储空间大 数据量大 计算量大 1.1.2 大数据开发通用步骤及其对应的技术 大数据采集->大数据预处 ...
- Kafka与Spark案例实践
1.概述 Kafka系统的灵活多变,让它拥有丰富的拓展性,可以与第三方套件很方便的对接.例如,实时计算引擎Spark.接下来通过一个完整案例,运用Kafka和Spark来合理完成. 2.内容 2.1 ...
- 使用Scala实现Java项目的单词计数:串行及Actor版本
其实我想找一门“具有Python的简洁写法和融合Java平台的优势, 同时又足够有挑战性和灵活性”的编程语言. Scala 就是一个不错的选择. Scala 有很多语言特性, 建议先掌握基础常用的: ...
随机推荐
- Dalvik指令格式
一段Dalvik汇编代码由一系列Dalvik指令组成,指令语法由指令的位描述与指令格式 标识来决定.位描述约定如下: 每16位的字采用空格分隔开来每个字母表示四位,每个字母按顺序从高字节开始,排列到低 ...
- 在svg中的line和path根据路径返回x,y
由于path有自带的api可获得总长度,和某个长度返回的坐标. var total = d.path.getTotalLength();//返回总长度 var point = d.path.getPo ...
- 【Python全栈笔记】01 [模块二] 14-15 Oct 运算符和字符串 4-1
编码的问题 中文版 Windows 终端是默认GBK编码格式,python2默认为ASCII编码,虽然我们注释了需要用UTF-8,但是通过命令行运行的文件如果print中文内容还是会出现乱码. Uni ...
- 忘记BIOS超级管理员密码,怎么破解?
[请尊重原创版权,如需引用,请注明来源及地址] 本人就喜欢没事瞎折腾,动动手活动活动筋骨没坏处,前不久非常便宜的弄到一玩具 ThinkPad T400(公司处理品),外观还算不错,除了电源适配器是坏的 ...
- SonarQube-5.6.3 代码分析平台搭建使用
python代码分析 官网主页: http://docs.sonarqube.org/display/PLUG/Python+Plugin Windows下安装使用: 快速使用: 1.下载jdk ht ...
- Ajax 知识点
AJAX 即"Asynchronous Javascript And XML"(异步JavaScript和XML) Ajax 不是某种编程语言,只是一种在无需重新加载整个网页的情况 ...
- eclipse的安装与配置
eclipse的英文名是日蚀,一直很喜欢这个名字. 1.安装很简单,直接下载eclipse包,免安装的.解压后找到其执行文件,如图所示.
- html导入css样式的方法
在html网页中引入css样式表主要有一下四种方法 1.行内引入 <p style="width:100px;height:40px;color:red;"></ ...
- 用SMIL语言编写一个简单的演示
一.首先需要注意的几点是: 1.用记事本编写代码时,要保存为后缀名为.smil或.smi的文件,并且编码格式选择为UTF-8. 2.打开.smil文件的播放器选择为:RealPlayer或是Ambul ...
- softmax分类器+cross entropy损失函数的求导
softmax是logisitic regression在多酚类问题上的推广,\(W=[w_1,w_2,...,w_c]\)为各个类的权重因子,\(b\)为各类的门槛值.不要想象成超平面,否则很难理解 ...