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

 


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

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

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

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

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

转载于:https://www.cnblogs.com/bitpeach/p/3756172.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单的日历小程序

一个可以查询1900年之后的所有年份当月月历。 import java.util.Scanner; public class Calendar {//输入年月输出当月日历public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.println("请输入年份");int year input.nextI…

python龟图_python学习turtle(龟图标状态)

2019独角兽企业重金招聘Python工程师标准>>>记录学习turtle.hideturtle()turtle.ht()&#xff0c;隐藏龟图标。turtle.showturtle()turtle.st()&#xff0c;显示龟图标。turtle.isvisible()&#xff0c;龟是否显示。显示返回true&#xff0c;否则返回false。turtle.sh…

spring mvc相关问题

1&#xff1a; 基于注解的SpringMVC简单介绍 2&#xff1a; spring组件扫描<context:component-scan/>使用详解 3&#xff1a; springMvc 注解配置例子

C# - 创建List属性的简单方法

不用担心List没有创建问题。 private ObservableCollection<EquipmentItem> _optionalCollection;public ObservableCollection<EquipmentItem> OptionalCollection{get{if (this._optionalCollection null){this._optionalCollection new ObservableCollection&…

旋转函数_【视频课】:一次函数拓展应用(图象的平移、旋转、轴对称及5种解题方法)...

请点击上方“出彩数学”可以免费订阅哦停课不停学★ 特别关注&#xff1a;今日头条、西瓜视频——初三中考解题方法与技巧、初一、初二的同步讲解视频&#xff0c;正在陆续上传&#xff0c;请关注今天头条或西瓜视频(下载APP&#xff0c;搜索“出彩数学”&#xff0c;关注即可…

c语言中,关于延迟函数的理解

对于延迟&#xff0c;有些c基础的人都能够做到用for或while来实现 例如&#xff1a; #include <stdio.h>int main() {int i, j, k;for (i 1; i < 1000; i){for (j 1; j < 1000; j){for (k 1; k < 1000; k){}}}printf("hello\n");return 0; }1234…

static方法不能直接访问类内的非static变量和不能调用this,super语句分析

大家都知道在static方法中&#xff0c;不能访问类内非static成员变量和方法。可是原因是什么呢&#xff1f; 这首先要从static方法的特性说起。static方法&#xff0c;即类的静态成员经常被称为“成员变量”&#xff08;class members&#xff09;&#xff0c;对于静态成员变量…

C++ Qt 访问权限总结

总结&#xff1a;C的访问修饰符的作用是以类为单位&#xff0c;而不是以对象为单位。 通俗的讲&#xff0c;同类的对象间可以“互相访问”对方的数据成员&#xff0c;只不过访问途径不是直接访问. 步骤是&#xff1a;通过一个对象调用其public成员函数&#xff0c;此成员函数可…

火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...

不管是做自媒体还是做电商或是工作素材采集&#xff0c;都离不开视频&#xff0c;视频比文字更好展示出产品、细节内容&#xff0c;就好比我们经常看的抖音、快手、火山、皮皮虾之类的短视频里面就有很多优秀的素材&#xff0c;相信有采集过的朋友都会遇到平台水印这个问题吧&a…

输出素数

素数是指仅能被1和她自身整除的整数。&#xff08;1 不是素数&#xff09; 程序设计时 i 可以从2开始&#xff0c;到该整数的 1/2为止&#xff0c;用 i 一次去除需要判断的整数&#xff0c;只要存在可以整除该数的情况&#xff0c;即可以确定要判断的整数不是素数&#xff0c;…

php CI 实战教程:如何去掉index.php目录

Windows下自由创建.htaccess文件的N种方法.htaccess是apache的访问控制文件&#xff0c;apache中httpd.conf的选项配合此文件&#xff0c;完美实现了目录、站点的访问控制&#xff0c;当然最多的还是rewrite功能&#xff0c;即URL重写&#xff0c;PHP中实现伪静态的一个重要途径…

十字连接焊盘_你应该知道的焊盘基础知识

PADSTACK&#xff1a;就是一组PAD的总称。Copper pad&#xff1a;在布线层(routing layer),注意不是内层&#xff0c;任何孔都会带有一个尺寸大于钻孔的铜盘(copper pad)。对内布线层这个铜盘大概14 mils&#xff0c;外布线层更大。如果这里需要导线连接,那么这个可以提供一个可…

逆序输出字符串

void re(char *str, int len); void re2(char *str); int main() { char str[1024] “I am from ShangHai”; //char str[1024] “a b c d e f”; re(str, strlen(str)); printf("first : |%s|\n", str);re2(str); printf("second : |%s|\n", str);…

利用stat命令获取Linux文件系统和文件的详细状态信息

用途&#xff1a;stat命令用于显示文件或文件系统的状态信息&#xff0c;来自于coreutils软件包&#xff0c;一般系统自带此命令工具&#xff0c;它能获取与文件系统及文件相关的许多信息&#xff0c;具体用途见stat的功能选项。这些信息包括inode、atime、ctime、mtime、文件&…

平面上最近点对

在二维平面上的n个点中&#xff0c;如何快速的找出最近的一对点&#xff0c;就是最近点对问题。 一种简单的想法是暴力枚举每两个点&#xff0c;记录最小距离&#xff0c;显然&#xff0c;时间复杂度为O(n^2)。 在这里介绍一种时间复杂度为O(nlognlogn)的算法。其实&#xff0c…

分词之后的如何做特征选择_特征选择怎么做?这篇文章告诉你

作者 | Pier Paolo Ippolito翻译 | Skura编辑 | 唐里原文标题&#xff1a;Feature Selection Techniques据《福布斯》报道&#xff0c;每天大约会有 250 万字节的数据被产生。然后&#xff0c;可以使用数据科学和机器学习技术对这些数据进行分析&#xff0c;以便提供分析和作出…

Shell脚本中循环语句for,while,until用法

循环语句:BashShell中主要提供了三种循环方式&#xff1a;for、while和until。一、for循环for循环的运作方式&#xff0c;是讲串行的元素意义取出&#xff0c;依序放入指定的变量中&#xff0c;然后重复执行含括的命令区域&#xff08;在do和done 之间&#xff09;&#xff0c;…

我的扫描器设计

Web扫描器SeachPlan的设计与实现 姓名 李波 2014年6月 中图分类号&#xff1a;TP311. UDC分类号&#xff1a;004. Web漏洞扫描器SeachPlan的设计与实现 作 者 姓 名 李波 学 院 名 称 软件学院 指 导 教 师 XXX 答辩委员会主席 XXX …

git管理账户忘记了_强制找回GitLab管理员账户密码的方法

01. 概述如果gitlab的密码忘记了&#xff0c;由于没有邮箱服务支持&#xff0c;所以可以通过后台直接操作git-shell&#xff0c;先找回管理员的密码。操作步骤如下02. 环境使用docker部署的gitlab&#xff0c;因此需要多执行一步&#xff0c;如果是传统安装方法&#xff0c;不用…