声明:

  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选项大致为:

)-input:输入文件路径

)-output:输出文件路径

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

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

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

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

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

)-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模式的英文词频统计实验结束。


<<<<<<<<<  写在页面最底的小额打赏  >>>>>>>>>

如果读者亲愿意的话,可以小额打赏我,感谢您的打赏。您的打赏是我的动力,非常感激。

必读:如您愿意打赏,打赏方式任选其一,本页面右侧的公告栏有支付宝方式打赏,微信方式打赏。

避免因打赏产生法律问题,两种打赏方式的任一打赏金额上限均为5元,谢谢您的支持。

如有问题,请24小时内通知本人邮件。

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

  1. Lucene全文检索_分词_复杂搜索_中文分词器

    1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search)  1.1.1 定义 全文检索就是先分词创建索引,再执行搜索的过 ...

  2. Lucene索引库维护、搜索、中文分词器

    删除索引(文档) 需求 某些图书不再出版销售了,我们需要从索引库中移除该图书. 1 @Test 2 public void deleteIndex() throws Exception { 3 // ...

  3. Hadoop上的中文分词与词频统计实践 (有待学习 http://www.cnblogs.com/jiejue/archive/2012/12/16/2820788.html)

    解决问题的方案 Hadoop上的中文分词与词频统计实践 首先来推荐相关材料:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-c ...

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

    原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...

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

    Mahout简介 Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目, 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建 ...

  6. NLP系列-中文分词(基于统计)

    上文已经介绍了基于词典的中文分词,现在让我们来看一下基于统计的中文分词. 统计分词: 统计分词的主要思想是把每个词看做是由字组成的,如果相连的字在不同文本中出现的次数越多,就证明这段相连的字很有可能就 ...

  7. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  8. 用于Lucene的各中文分词比较

    对几种中文分析器,从分词准确性和效率两方面进行比较.分析器依次为:StandardAnalyzer.ChineseAnalyzer.CJKAnalyzer.IK_CAnalyzer.MIK_CAnal ...

  9. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

随机推荐

  1. Server SQL 2008 练习

    一.修改数据库 (1)给db_temp数据库添加一个数据文件文件db_temp1指定大小为5MB,最大文件大小为100mb,自动递增大小为1MB,存储路径为d:\. 利用系统存储过程sp_helpdb ...

  2. 统计个位数的数目 Exercise07_07

    /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:统计个位数的数目 * */ public class Exercise07_07 { public static void m ...

  3. SpringBoot整合Mybatis多数据源 (AOP+注解)

    SpringBoot整合Mybatis多数据源 (AOP+注解) 1.pom.xml文件(开发用的JDK 10) <?xml version="1.0" encoding=& ...

  4. Problem G: 十进制数转换为二进制数

    #include<stdio.h> int main() { ]; while(scanf("%d",&n)!=EOF) { ; ) { a[i++]=n%; ...

  5. 未能加载文件或程序集“System.Web.Razor 2.0.0 or system.web.webpages.razor 2.0.0

    出现这种问题,有两种情况: 一.bin目录下没有相应的dll,可以将相应dll拷贝至bin目录或者设置相关dll的属性“复制到本地”:true 二.如果是高于Visual Studio2013版本的开 ...

  6. zk常见面试题

    一个客户端修改了某个节点的数据,其它客户端能够马上获取到这个最新数据吗 ZooKeeper不能确保任何客户端能够获取(即Read Request)到一样的数据,除非客户端自己要求:方法是客户端在获取数 ...

  7. nodejs调试利器:supervisor

    测试多了,是不是感觉每次要重新node一次app.js,很烦恼? 用supervisor,只有有改动,页面刷新就可以看到效果,不用重启node.js 安装: npm -g install superv ...

  8. Jquery JS 正确的比较两个数字大小的方法

    if(2 > 10){ alert("不正确!");} 此比较不会是想要的结果:它相当于2 >1,把10的第一位取出来比较. 解决方 法:  if(eval(2) &g ...

  9. [Java基础] java的守护线程与非守护线程

    最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...

  10. vim的批量列编辑

    使用快捷键:control+v进入状态“VISUALBLOCK”,然后使用方向键向下选择,选择多行,向右选择,选择多列,使用快捷键d删除所选. 再次进入VISUAL BLOCK状态,选择多行多列, 使 ...