xj_28cm 2021-04-09 05:05 采纳率: 60%
浏览 87
已采纳

如何用python用mrjob进行mapreduce编写查找长度 2 的所有路径?

创建一个CSV文件,其中每行包含两个网址,指定一个链接。即,每行的第一个和第二个值指定了有关链接的来源和目的地。例如:

url1,url2

url1,url3

url2,url3

url4,url5

url2,url4

给定这样的 CSV 文件,编写一个 MapReduce 程序,在相应的 URL 链接中查找长度 2 的所有路径。就是说,它找到了网址的三倍(u,v,w),这样就有一个链接从u到v和一个链接从v到w。 例如,上面的示例 CSV 文件包含以下长度 2 的路径:

url2, url4, url5

url1, url2, url3

url1, url2, url4

现进行到初步代码如下:

class part(MRJob):

    def steps(self):
        return [MRStep(mapper=self.mapper, reducer=self.reducer)]
        #return [MRStep(mapper=self.mapper)]


    def mapper(self, key, document):
       
        for word in document.split(','):

            yield word, 1

    def reducer(self, word, line):

        yield word, line



part.run()
  • 写回答

2条回答 默认 最新

  • ProfSnail 2021-04-09 17:18
    关注
    from mrjob.job import MRJob
    class part(MRJob):
    	def mapper(self, _, line):
    		words = line.split(',')
    		yield words[1], words
    		yield words[0], words
    
    	def reducer(self, key, values):
    		starts, ends = [], []
    		for x in values:
    			if x[0] == key:
    				ends.append(x[1])
    			elif x[1] == key:
    				starts.append(x[0])
    
    		for start in starts:
    			for end in ends:
    				yield key, ','.join([start,key,end])
    
    if __name__ == '__main__':
    	part.run()

    得到的输出结果是这样: 

    C:\Coding\Python\CSDN\ByName\godsavedme>python firstMrjob.py urls.csv
    No configs found; falling back on auto-configuration
    No configs specified for inline runner
    Creating temp directory C:\Users\zhang\AppData\Local\Temp\firstMrjob.zhang.20210409.091651.884561
    Running step 1 of 1...
    job output is in C:\Users\zhang\AppData\Local\Temp\firstMrjob.zhang.20210409.091651.884561\output
    Streaming final output from C:\Users\zhang\AppData\Local\Temp\firstMrjob.zhang.20210409.091651.884561\output...
    "url2"  "url1,url2,url3"
    "url2"  "url1,url2,url4"
    "url4"  "url2,url4,url5"
    Removing temp directory C:\Users\zhang\AppData\Local\Temp\firstMrjob.zhang.20210409.091651.884561...
    

    输出的前面单词是整个路径的中间路径名。

    我这里测试通过啦~

    记得采纳一波哦~如果有问题可以继续私信交流~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行