具有最大度数的MapReduce节点

时间:2019-03-17 22:07:53

标签: graph mapreduce nodes mrjob degrees

我使用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()

在此先感谢您的帮助!

0 个答案:

没有答案