Data Science from Scratch 之 MapReduce

MapReduce


MapReduce是一种计算模型,只不过这种计算模型是在并行计算世界里。

考虑一个简单的例子-单词统计

from collections import Counter
import re
documents = ["data science", "big data", "science fiction"]

def tokenize(message):
    message = message.lower()
    all_words = re.findall('[a-z0-9]+',message)
    return set(all_words)

def word_count_old(documents):
    return Counter(word for document in documents
            for word in tokenize(document))

print word_count_old(documents)

最简单的统计是这样的,但如果有成千上亿个这样的文档,这个方法就显得特别慢了,还有可能电脑吃不消那么大的数据。

先贴上代码:

def wc_mapper(document):
    """for each word in the document,emit (word,1)"""
    for word in tokenize(document):
        yield (word,1)

def wc_reducer(word,counts):
    yield (word,sum(counts))

def word_count(documents):
    collector = defaultdict(list)
    for document in documents:
        for word,count in wc_mapper(document):
            collector[word].append(count)
    print collector
    return [output for word,counts in collector.iteritems() for output in wc_reducer(word,counts)]

print word_count(documents)

这部分难以理解,我们一步一步来看。就以documents = ["data science", "big data"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值