我使用MRJob编写了代码来计算图形的最大程度。 但是我的方法是错误的,因为我有限制,不能将所有节点都加载到单台计算机的内存中。
我的数据采用以下格式:
[A,B]
[B,C]
[B,D]
....
有人可以建议我如何修改我的代码
class MRDegreeFinder(MRJob):
def mapper(self, _, line):
line=re.sub('([1-9][0-9]*)|0', '', line)
lst=re.compile('\w+').findall(line)
yield None, lst
def reducer(self, null,records):
self.D=defaultdict()
for record in records:
if record[0] not in self.D:
self.D[record[0]]=1
else:
self.D[record[0]]+=1
if record[1] not in self.D:
self.D[record[1]]=1
else:
self.D[record[1]]+=1
sortlist2 = sorted(self.D.items(), key=operator.itemgetter(1), reverse=True)
yield sortlist2[0]
print(sortlist2[0])
if __name__ == '__main__':
MRDegreeFinder.run()
我试图通过多个步骤来修改代码,但是仍然面临如何仅输出最大程度的节点的问题:
class MRDegreeFinder(MRJob):
def mapper(self, _, line):
line=re.sub('([1-9][0-9]*)|0', '', line)
lst=re.compile('\w+').findall(line)
yield lst[0],1
yield lst[1],1
def reducer_init(self):
self.D={}
self.maximum=0
def reducer(self, key,values):
yield key, sum(values)
def reducer_final(self,key,summ):
if summ>self.maximum:
self.D.clear()
self.maximum=summ
self.D[key]=summ
yield self.D
def steps(self):
return [
MRStep(mapper=self.mapper,
reducer_init=self.reducer_init,
reducer=self.reducer,
reducer_final=self.reducer_final)
]
if __name__ == '__main__':
MRWordFrequencyCount.run()
在此先感谢您的帮助!