文档章节

Python模拟MapReduce的流程

吐槽的达达仔
 吐槽的达达仔
发布于 2014/12/05 22:17
字数 357
阅读 37
收藏 1

说一下开发环境,是在WIN7下面进行的。

python环境是:python2.7

 

MapReduce的主要流程有:

Map阶段->Shuffle阶段->Reduce阶段。

那么一下分别对应三个python脚本片段:

 

数据样本:test.txt

a b c d
a b c d
aa bb cc dd
ee ff gg hh
foo foo quux labs foo bar quux

 

第一个脚本,叫做mapper.py

#!/bin/env python

import sys
def mapword(w):
    print "%s\t%d"%(w,1)
for line in sys.stdin:
    line = line.strip()

    words = line.split()
    m = map(mapword,words)

 

第二个脚本,叫做sort.py

import sys
def mapword(w):
    print "%s\t%d"%(w,1)
m = []
for line in sys.stdin:
    line = line.strip()

    word,count = line.split('\t')
    m.append((word,count))
m = sorted(m)
for i in m:
    print "%s\t%s"%i

 注意,实际上在分布式环境下,这个是sort by而不是order by。

也就是说在每个分区下是有序的,而并不是全局有序。

如果要做到全局有序,必须在一个reduce里面进行。

 

第三脚本,是reducer.py

import sys

current_word = None
current_count = 0
word = None

for line in sys.stdin:
    line = line.strip()

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

    try:
        count = int(count)
    except ValueError:
        continue

    if current_word == word:
        current_count += count
    else:
        if current_word:
            print '%s\t%s' % (current_word, current_count)
        current_count = count
        current_word = word

if current_word == word:
    print '%s\t%s' % (current_word, current_count)

 

在这个简单的word count例子里面。

ruducer的作用就像是一个dict或者叫做map,将数据维护到一份内存里面。然后在最后一起输出。

 

在Windows下的调试命令如下:

>type test.txt | python mapper.py | python sort.py | python reducer.py

 

结果如下:



 

 

 

 

 

 

 

 

 

 

本文转载自:http://dacoolbaby.iteye.com/blog/1912831

吐槽的达达仔
粉丝 27
博文 103
码字总数 6775
作品 0
广州
程序员
私信 提问
Pydoop 架构和模块包介绍

背景 Hadoop支持Java以及C/C++开发,其中Hadoop Pipes(C++)支持MapReduce,而Hadoop libhdfs(C)支持HDFS的访问。但Python的解决方案仅能支持Hadoop部分功能,具体如下。 Hadoop Streaming:1...

索隆
2012/09/13
426
0
Hadoop MapReduce计算框架

1、MapReduce理论 1.1、MapReduce是什么? MapReduce用于处理海量数据的分布式计算框架,是Hadoop生态中的核心之一(MapReduce用于计算海量数据,HDFS用于存储海量数据);MapReduce是谷歌公...

巴利奇
2018/10/30
0
0
mrjob 在hdfs上跑

是这样的,我照着网上的教程写好了一个用mrjob模块的mapreduce的python程序,名字叫word.py 在我的hdfs上 /test/bible bible是一个文档,在本地测试的时候扔到word.py里面是可以被计算出单词...

隔壁的流氓王欧巴
2015/12/30
641
2
【大数据分析常用算法】0.简介

简介 本系列教程主要探讨有关大数据的所有常用算法的实现,定期加入有趣的项目实践。 1、实现语言 初步使用java实现,后续加入python。 Hadoop Mapreduce Java实现 位于包*.mapreduce下。 Sp...

Areya
01/14
52
0
使用Python实现Hadoop MapReduce程序

笔者的机器运行效果如下(输入数据是find的帮助手册,和笔者预期一样,the是最多的): --------------------------------------以下是原帖--------------------------------- 在这个实例中,...

彼得
2014/04/03
6K
4

没有更多内容

加载失败,请刷新页面

加载更多

DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
今天
3
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
5
0
Python机器学习之数据探索可视化库yellowbrick

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维。陆续使用过plotly、seaborn,...

yeayee
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部