前言
一般来说,在学习某个新技术之前,都会写一个Hello World!的小程序,这个程序简单但是包含了一个程序所必须具备的一切。MapReduce程序也有自己的Hello World,那即是Word Count。
在学习用python编写word count的过程中,遇到了许多坑,网上许多教程都过时了或者版本不对,许多基于python的word count教程都是转载自或者翻译自这片文章http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/.
从截图来判断,文章是2007年写的,使用的可能是python2.x,Hadoop0.x版本。现在来看显然已经过时了。参考了那篇文章后,本文使用python3.6,Hadoop2.7.4在ubuntu16.04的环境下实现python编写的wordcount的MapReduce程序。
正文
实现wordcount任务,我们分别编写mapper.py和reducer.py,其中mapper.py负责将文章切分为单个单词,以<单词,1>的元组形式输出,其中1代表数量,英文mapper只负责分割,所以每个单词数量都是1,注意会有重复的单词,比如you,那么会多次出现元组
mapper.py
首先我们来编写mapper,逻辑不负责,代码如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Date : 2018-04-16 14:13:44
"""mapper.py"""
import sys
import re
# print("hello world")
for line in sys.stdin