链接:https://www.oschina.net/question/2861327_2244973

0
清风444 2017/06/13 22:01
你可以在本地模拟MR的过程,比如以经典的wordcount为例:

cat ~/data/words.txt | python word_count_mapper.py | sort | python word_count_reducer.py | sort -nr -k 2 |head -n 10
顺便给你贴一下py代码

#!/usr/bin/env python
#-- coding=utf8 --

import sys,re

re_english = re.compile(u’[^a-zA-Z0-9-]+’)

for line in sys.stdin: #这里你可以看做是map类中的line输入
words = re_english.sub(’ ',line.strip()) #这里只提取英文数字
for word in words.split():
print ‘%s\t%s’ % (word, 1) #这儿就是标准的输出,用tab隔开 默认第一个值为key
word_count_mapper.py

!/usr/bin/env python
#-- coding=utf8 --

import sys

lastk = None #这里标志最后一个k 用于控制同一个key 到一个组中
count = 0

for line in sys.stdin:
w,c = line.split(’\t’)
c = int© #不转成int会比较麻烦 这是是计数
if lastk == None: #这里是判断是否过来的是第一个key
lastk=w
count += c
elif lastk == w:
count += c
else:
print “%s\t%s”%(lastk,count)
lastk=w
count = c #这里重置计数

if lastk is not None:
print “%s\t%s”%(lastk,count)
word_count_reducer.py

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐