在hadoop上用Python实现WordCount

一、简单说明

本例中我们用Python写一个简单的运行在Hadoop上的MapReduce程序,即WordCount(读取文本文件并统计单词的词频)。这里我们将要输入的单词文本input.txt和Python脚本放到/home/data/python/WordCount目录下。

cd /home/data/python/WordCount

vi input.txt

输入:

There is no denying that

hello python

hello mapreduce

mapreduce is good

二、编写Map代码

这里我们创建一个mapper.py脚本,从标准输入(stdin)读取数据,默认以空格分隔单词,然后按行输出单词机器词频到标准输出(stdout),整个Map处理过程不会统计每个单词出现的总次数,而是直接输出“word 1”,以便作为Reduce的输入进行统计,确保该文件是可执行的(chmod +x /home/data/python//WordCount/mapper.py)。

cd /home/data/python//WordCount

vi mapper.py

#!/usr/bin/env python

# -*- coding:UTF-8 -*-

import sys

#输入为标准输入stdin

for line in sys.stdin:

#删除开头和结尾的空格

line = line.strip()

#以默认空格分隔行单词到words列表

words = line.split()

for word in words:

#输出所有单词,格式为“单词,1”以便作为Reduce的输入

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

#截图如下:

三、编写Reduce代码

这里我们创建一个reducer.py脚本,从标准输入(stdin)读取mapper.py的结果,然后统计每个单词出现的总次数并输出到标准输出(stdout),

确保该文件是可执行的(chmod +x /home/data/python//WordCount/reducer.py)

cd /home/data/python//WordCount

vi reducer.py

#!/usr/bin/env python

# -*- coding:UTF-8 -*-

import sys

current_word = None

current_count = 0

word = None

#获取标准输入,即mapper.py的输出

for line in sys.stdin:

#删除开头和结尾的空格

line = line.strip()

#解析mapper.py输出作为程序的输入,以tab作为分隔符

word,count = line.split(‘\t‘,1)

#转换count从字符型为整型

try:

count = int(count)

except ValueError:

#count不是数据时,忽略此行

continue

#要求mapper.py的输出做排序操作,以便对连接的word做判断,hadoop会自动排序

if current_word == word:

current_count += count

else:

if current_word:

#输出当前word统计结果到标准输出

print(‘%s\t%s‘ %(current_word,current_count))

current_count = count

current_word = word

#输出最后一个word统计

if current_word == word

print(‘%s\%s‘ %(current_word,current_count))

#截图如下:

四、本地测试代码

我们可以在Hadoop平台运行之前在本地测试,校验mapper.py与reducer.py运行的结果是否正确。注意:测试reducer.py时需要对mapper.py的输出做排序(sort)操作,不过,Hadoop环境会自动实现排序。

#在本地运行mapper.py:

cd /home/data/python/WordCount/

#记得执行: chmod +x /home/data/python//WordCount/mapper.py

cat input.txt | ./mapper.py

#在本地运行reducer.py

#记得执行:chmod +x /home/data/python//WordCount/reducer.py

cat input.txt | ./mapper.py | sort -k1,1 | ./reducer.py

五、在Hadoop平台上运行代码

在hadoop运行代码,前提是已经搭建好hadoop集群

1、创建目录并上传文件

首先在HDFS上创建文本文件存储目录,这里我创建为:/WordCound

hdfs dfs -mkdir /WordCound

#将本地文件input.txt上传到hdfs的/WordCount上。

hadoop fs -put /home/data/python/WordCount/input.txt /WordCount

hadoop fs -ls /WordCount      #查看在hdfs中/data/WordCount目录下的内容

2、执行MapReduce程序

为了简化我们执行Hadoop MapReduce的命令,我们可以将Hadoop的hadoop-streaming-3.0.0.jar加入到系统环境变量/etc/profile中,在/etc/profile文件中添加如下配置:

首先在配置里导入hadoop-streaming-3.0.0.jar

vi /etc/profile

HADOOP_STREAM=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-3.0.0.jar

export HADOOP_STREAM

source /etc/profile    #刷新配置

#执行以下命令:

hadoop jar $HADOOP_STREAM -file /home/data/python/WordCount/mapper.py -mapper ./mapper.py -file /home/data/python/WordCount/reducer.py -reducer ./reducer.py -input /WordCount -output /output/word1

得到:

然后,输入以下命令查看结果:

hadoop fs -ls /output/word1

hadoop fs -cat /output/word1/part-00000   #查看分析结果

可以发现,结果与之前测试的时候是一致的,那么恭喜你,大功告成!

python wordcount_在Hadoop上用Python实现WordCount相关推荐

  1. python hadoop wordcount_在Hadoop上用Python实现WordCount

    一.简单说明 本例中我们用Python写一个简单的运行在Hadoop上的MapReduce程序,即WordCount(读取文本文件并统计单词的词频).这里我们将要输入的单词文本input.txt和Py ...

  2. python:在Windows上使用 Python

    python:在Windows上使用 Python 4.1. 完整安装程序 4.2. Microsoft Store包 4.3. nuget.org 安装包 4.4. 可嵌入的包 4.5. 替代捆绑包 ...

  3. python部署到hadoop上_python实现mapreduce(2)——在hadoop中执行

    目的:将python实现mapreduce(1)中的python脚本部署到hadoop上,实现mapreduce. 1. 修改脚本执行权限 [tianyc@TeletekHbase ~]$ which ...

  4. visual studio可以开发python吗_Visual Studio上开发Python六大功能

    一.整合 Python 直译器 (Interpreter) & 互动视窗 (Interactive) Visual Studio 高度整合 Python 直译器,让您能够在开发过程中切换不同版 ...

  5. 在哪个Linux发行版上运行python,怎么在linux上运行python

    Linux默认是已经安装好了Python程序 目前来说,大多数的Linux发行版是安装了两个版本的Python程序 一个是Python 2.x 一个是Python 3.x 一些系统自带的程序文件需要P ...

  6. python笑傲江湖_ensp模拟器上玩python编程自动化(入门)

    1.安装python3.Geany编辑器和Paramiko模块 1.1安装python 官网下载https://www.python.org/ 或其他下载站点下载后安装python3,安装时选择创建环 ...

  7. ipad python编程软件_ipad上运行python的方法步骤

    ipad上可以运行python么? ipad上是可以运行python的. 1.在我们的ipad上百度搜索Python,点击进去. 2.进去网站之后,点击"Downloads->Wind ...

  8. python网页编辑器-史上超强 Python 编辑器,竟然是张网页?!

    原标题:史上超强 Python 编辑器,竟然是张网页?! 导读:俗话说,磨刀不误砍柴工,要想闯荡编程世界,一套趁手的编辑器是必不可少的.对 Python 语言的使用者来说,不论你是刚开始学习编程知识的 ...

  9. python玩转android_Android上执行python脚本-QPython

    看书,发现android可以跑python. 尝试了一下. 首先需要在手机上安装python环境,通过安装apk实现,这个apk叫QPython,还有同类的比如SL4A. QPython的官网:htt ...

最新文章

  1. 不是报错就是崩盘,这些代码迁移问题你遇到过几个?
  2. 谈谈redis,memcache的区别和具体应用场景
  3. 数字图像处理实验(9):PROJECT 04-05,Correlation in the Frequency Domain
  4. 解析BW:数据源提取数据的原理
  5. 浅学JavaScript
  6. SQL Sever中SQL语句语法,适合初学者使用
  7. 服务器系统事件报错4103,IIS信息服务器排错指导
  8. asa802.k8-telnet for lan-base
  9. 《大道至简》的幕后故事(2):“愚公移山记”人物篇
  10. Ubuntu18.04之微信中文乱码解决
  11. 苹果公司的企业文化_标志设计对于企业的重要性,性价比高的标志设计公司分享...
  12. cmos和ttl_ttl和cmos的区别
  13. JSP+MySQL基于ssm的物理竞赛管理系统-
  14. confluence挖矿病毒(kdevtmpfsi 、solrd)解决
  15. 三阶魔方还原步骤图_七步玩转三阶魔方还原公式及步骤图解教程
  16. zk kafka常识
  17. IEEE Transactions on Systems, Man, and Cybernetics: Systems(TSMC)投稿须知
  18. error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h“
  19. 【冷冻电镜】Relion4.0——subtomogram教程
  20. VLC for iOS

热门文章

  1. html 多页面全局变量,JavaScript如何定义全局变量
  2. Spring原理及特性
  3. 【前端优化 Vue项目优化】 如何避免浏览器卡顿,实现性能优化cdn?
  4. 人像后期的系统性后期处理
  5. Vue data()、props及ref
  6. C语言实现基础查找算法
  7. html行高设置失效,关于css中line-height(行高)设置无效的问题的解决方法
  8. redisson简单介绍
  9. 安卓系统卡顿的解决方法
  10. 硅谷最强的美女骗子,终于要坐牢了?