使用python的mapreduce简单函数

2021-04-12 00:49:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解更好的大数据编程,但我对python几乎一无所知。所以我使用mapreduce范例,实际上在python中,我处理存储在某个目录中的一些文本文件,比如mydir,这样我的数据源是:

global_file = glob.glob("mydir/*")

def file_contents(file_name):
     f = open(file_name)
     try:
         return f.read()
     finally:
         f.close()

datasource = dict((file_name, file_contents(file_name)) for file_name in global_file)

那么我的mapreduce函数是

^{pr2}$

首先,k和{}代表一个键值对,其中k是文件的id,而v是后一个文件的内容。(最后我想获得按作者分组的每个单词的出现次数)

现在的问题是,当我运行algo时,我得到一个空数组结果。我的python语法正确吗?在

1条回答
网友
1楼 ·

我用更好的命名和正确的regexp对mapfn函数进行了部分重写,并添加了一个简单的测试:

import re

datasource = {
    "foo":(
        "paper-1:::author1::author2::authorN:::title1\n" 
        "paper-2:::author21::author22::author23::author2N:::title2\n"
        "paper-3:::author31::author32:::title3"
        )
    }

def mapfn(k, v):
    for line in v.splitlines():
        data = re.split(r":{2,3}", line)
        words = data[-1].split()
        for author in data[1:-1]:
            for word in words:
                yield author + word, 1


def main():
    for k, v in datasource.items():
        for result in mapfn(k, v):
            print result

if __name__ == "__main__":
    main()

结果如下:

^{pr2}$

不确定这是否是您所期望的,但至少它会产生一些输出。到目前为止,我还没有任何关于mapReduce的实际操作经验,所以您要么需要告诉更多关于上下文的信息,要么您如何运行代码,要么等待本地的mapReduce专家插话。在

相关问题