Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

声明:

  1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究。

2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好)。如不清楚配置可看《Hadoop之词频统计小实验初步配置

3)本文由于过长,无法一次性上传。其相邻相关的博文,可参见《Hadoop的改进实验(中文分词词频统计及英文词频统计)
博文目录结构
》,以阅览其余三篇剩余内容文档。

(五)单机伪分布的英文词频统计Python&Streaming


Python与Streaming背景


  • Python与Streaming

背景:Python程序也可以运用至hadoop中,但不可以使用MapReduce框架,只可以使用Streaming模式借口,该接口专为非java语言提供接口,如C,shell脚本等。

1)单机本机

Hadoop
0.21.0之前的版本中的Hadoop Streaming工具只支持文本格式的数据,而从Hadoop 0.21.0开始,也支持二进制格式的数据。hadoop
streaming调用非java程序的格式接口为:

Usage:
$HADOOP_HOME/bin/hadoop jar \

$HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar
[options]

其Options选项大致为:

(1)-input:输入文件路径

(2)-output:输出文件路径

(3)-mapper:用户自己写的mapper程序,可以是可执行文件或者脚本

(4)-reducer:用户自己写的reducer程序,可以是可执行文件或者脚本

(5)-file:打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典等。

(6)-partitioner:用户自定义的partitioner程序

(7)-combiner:用户自定义的combiner程序(必须用java实现)

(8)-D:作业的一些属性(以前用的是-jonconf)

举个例子,具体可以是:

$HADOOP_HOME/bin/hadoop
jar \

contrib/streaming/hadoop-0.20.2-streaming.jar
\

-input
input \

-ouput
output \

-mapper
mapper.py \

-reducer
reducer.py \

-file
mapper.py \

-file
reducer.py \

2)百度开放云

百度开放云很是方便,方便在于提供好了streaming的模式接口,如果需要本机提供此接口,需要将调用hadoop里的streaming.jar包,其次格式非常麻烦,有时总会不成功。不如百度开放云使用方便,当然了物有两面,百度开放云对于中文处理,显示总是乱码,故处理中文类,还是需要单机下的hadoop平台。

当然了,和单机下一样,至少你要写好两个python脚本,一个负责mapper,一个负责reducer,然后接下来后续步骤。

百度开放云提供的接口是:
hadoop jar
$hadoop_streaming –input Input –output Output –mapper "python mapper.py"
–reducer "python reducer.py" –file mapper.py –file reducer.py

只要环境做好,非常好用,直接成功。

Python英文词频统计实验


  • 实验过程

背景:Python程序也可以运用至hadoop中,但不可以使用MapReduce框架,只可以使用Streaming模式借口,该接口专为非java语言提供接口,如C,shell脚本等。

下面的步骤均是在百度开放云上进行操作的,如需在本机上操作,原理是一样的,命令也基本相同的。

1)准备数据

先打算处理简单文本,因此上传了三个简单的英文单词文本。如下图所示,我们可以看到文本里的内容。

然后,我们要开始准备python脚本,下表可看两个脚本的内容。






#
Mapper.py

#!/usr/bin/env
python

import
sys

#
maps words to their counts

word2count
= {}

#
input comes from STDIN (standard input)

for
line in sys.stdin:

# remove leading and trailing whitespace

line = line.strip()

# split the line into words while removing any empty strings

words = filter(lambda word: word, line.split())

# increase counters

for word in words:

# write the results to STDOUT (standard output);

# what we output here will be the input for the

# Reduce step, i.e. the input for reducer.py

#

# tab-delimited; the trivial word count is 1

print ‘%s\t%s‘ % (word, 1)

#
Reducer.py

#!/usr/bin/env
python

from
operator import itemgetter

import
sys

#
maps words to their counts

word2count
= {}

#
input comes from STDIN

for
line in sys.stdin:

# remove leading and trailing whitespace

line = line.strip()

# parse the input we got from mapper.py

word, count = line.split()

# convert count (currently a string) to int

try:

count = int(count)

word2count[word] = word2count.get(word, 0) + count

except ValueError:

# count was not a number, so silently

# ignore/discard this line

pass

#
sort the words lexigraphically;

#
this step is NOT required, we just do it so that our

#
final output will look more like the official Hadoop

#
word count examples

sorted_word2count
= sorted(word2count.items(), key=itemgetter(0))

#
write the results to STDOUT (standard output)

for
word, count in sorted_word2count:

print ‘%s\t%s‘% (word, count)

接着,上传两个脚本,并执行指令:

hadoop
jar $hadoop_streaming -input Input -output Output -mapper "python
    mapper.py" -reducer "python reducer.py" -file mapper.py
-file reducer.py

工作状态的示意图如下图所示:

最后出现结果,结果如图所示。

至此,streaming模式的英文词频统计实验结束。

Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4),布布扣,bubuko.com

时间: 2024-10-25 09:10:23

Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)的相关文章

hadoop中文分词、词频统计及排序

需求如下: 有如图所示的输入文件.其中第一列代表ip地址,之后的偶数列代表搜索词,数字(奇数列)代表搜索次数,使用"\t"分隔.现在需要对搜索词进行分词并统计词频,此处不考虑搜索次数,可能是翻页,亦不考虑搜索链接的行为. 这里中文分词使用了IK分词包,直接将源码放入src中.感谢IK分词. 程序如下: <span style="font-size:14px;">package seg; import java.io.ByteArrayInputStrea

实验二-2 Eclipse&amp;Hadoop 做英文词频统计进行集群测试

  创建目录上传英文测试文档(如果已有则无需配置).a.dfs上创建input目录 [email protected]:~/data/hadoop-2.5.2$bin/hadoop fs -mkdir -p input b.把hadoop目录下的README.txt拷贝到dfs新建的input里 [email protected]:~/data/hadoop-2.5.2$bin/hadoop fs -copyFromLocal README.txt input —————————————————

在Hadoop上运行基于RMM中文分词算法的MapReduce程序

原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词算法的MapReduce程序 23条回复 我知道这个文章标题很“学术”化,很俗,让人看起来是一篇很牛B或者很装逼的论文!其实不然,只是一份普通的实验报告,同时本文也不对RMM中文分词算法进行研究.这个实验报告是我做高性能计算课程的实验里提交的.所以,下面的内容是从我的实验报告里摘录出来的,当作是我学

Spark 大数据中文分词统计(三) Scala语言实现分词统计

Java版的Spark大数据中文分词统计程序完成之后,又经过一周的努力,把Scala版的Spark 大数据中文分词统计程序也搞出来了,在此分享给各位想学习Spark的朋友. 如下是程序最终运行的界面截图,和Java版差别不大: 如下是Scala工程结构: 当你在工程主类文件WordCounter.scala上单击右键,选择Run As Scala Application: 然后选择唐诗宋词进行分词统计,就会出现前面显示的分词结果. 工程代码已经上传CSDN:http://download.csd

利用word分词来对文本进行词频统计

word分词中的 org.apdplat.word.WordFrequencyStatistics 类提供了词频统计的功能 命令行脚本的调用方法如下: 将需要统计词频的文本写入文件:text.txt chmod +x wfs.sh & wfs.sh -textFile=text.txt -statisticsResultFile=statistics-result.txt 程序运行结束后打开文件statistics-result.txt查看词频统计结果 在程序中的调用方法如下: //词频统计设置

深入浅出Hadoop Mahout数据挖掘实战(算法分析、项目实战、中文分词技术)

Mahout简介 Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目, 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序 Mahout相关资源 ?Mahout主页:http://mahout.apache.org/ ?Mahout 最新版本0.8下载: http://mirrors.hust.edu.cn/apache/mahout/0.8/ 使用mahout-distribution-0.8.tar.g

词频统计英文和统计中文的区别

通常我们做英文词频统计的时候,我们可能会采用单词树,或者map等等. 但是,在进行中文的词频统计的时候,中文之间没有空格和符号,不像在英 文词频统计一样,英文之间是有空格和符号的.所以,相对于英文来说,中 文词频统计比较难.主要是不好提取中文字通常我们在提取中文时候会进行 划分,通过汉字的关联等等来进行划分,提取.

下载深入浅出Hadoop Mahout数据挖掘实战(算法分析、项目实战、中文分词技术)

随着云计算.大数据迅速发展,亟需用hadoop解决大数据量高并发访问的瓶颈.谷歌.淘宝.百度.京东等底层都应用hadoop.越来越多的企 业急需引入hadoop技术人才.由于掌握Hadoop技术的开发人员并不多,直接导致了这几年hadoop技术的薪水远高于JavaEE及 Android程序员.Hadoop入门薪资已经达到了 8K 以上,工作1年可达到 1.2W 以上,具有2-3年工作经验的hadoop人才年薪可以达到 30万—50万 . 深入浅出Hadoop Mahout数据挖掘实战(算法分析.

1.英文词频统2.中文词频统计

1.英文词频统 news=''' Guo Shuqing, head of the newly established China banking and insurance regulatory commission, was appointed Party secretary and vice-governor of the central bank on Monday, according to an announcement published on the People's Bank