python - 如何使用 Python 中的 MapReduce 计算单词序列在文件中出现的次数?
问题描述
考虑一个包含由空格分隔的单词的文件;用 Python 编写一个 MapReduce 程序,计算每个 3 字序列在文件中出现的次数。
例如,考虑以下文件:
one two three seven one two three
three seven one
seven one two
每个 3 字序列在该文件中出现的次数为:
"three seven one" 2
"four seven one two" 1
"one two three" 2
"seven one two" 2
"two three seven" 1
代码格式:
from mrjob.job import MRJob
class MR3Nums(MRJob):
def mapper(self,_, line):
pass
def reducer(self,key, values):
pass
if __name__ == "__main__":
MR3Nums.run()
解决方案
映射器应用于每一行,并且应该计算每个 3-word 序列,即产生 3-word 序列以及计数为 1。
reducer 用key
and调用values
,其中key
是一个 3 字序列,values
是一个计数列表(这将是一个 1 的列表)。reducer 可以简单地返回一个 3 词序列的元组和出现的总次数,后者通过 sum 获得。
class MR3Nums(MRJob):
def mapper(self, _, line):
sequence_length = 3
words = line.strip().split()
for i in range(len(words) - sequence_length + 1):
yield " ".join(words[i:(i+sequence_length)]), 1
def reducer(self, key, values):
yield key, sum(values)
推荐阅读
- javascript - MongoDB:尚未为模型“用户”注册模式
- flutter - Flutter 从服务器的响应返回数组
- python - 我可以信任 ZipInfo.file_size 吗?
- react-native - 单击图像的屏幕截图 react-naitve
- wordpress - 如何以低于所需购物车价值的价格限制 woocommerce 中的客户订单
- openshift - alertmanager/tivoli/omibus IBM openshift
- angular - 如何以角度2缓存图像路径
- php - PHP重新排序索引嵌套数组
- php - 是否可以在mysql数据库的一列中发布两个数据?
- php - Netbeans PHP 监视静态变量