Я получаю данные из файлов .edges (социальные сети Facebook).Каждая строка в этих файлах представляет ребро на графике.Например,
123 95
означает, что существует ребро от узла 123 до узла 95. Для каждого узла X меня интересует количество входящих ребер от четных узлов.Но меня интересуют только узлы X, которые имеют по крайней мере 3 входящих ребра от четных узлов.
Моя проблема в том, что я пробовал разные циклы и пытаюсь получить значения sum (valuelist) в моих результатах, где сумма (valuelist) только больше или равна 3.
from mrjob.job import MRJob
class WordCount(MRJob):
def mapper(self, key, line):
def even_number(key):
if float(key) %2 == 0:
return True
else:
return False
split_word = line.split()
if even_number(split_word[0]):
yield(split_word[1], 1)
def reducer(self, key, valuelist):
yield key, sum(valuelist)
if __name__ == '__main__':
WordCount.run()
Если входное значение равно:
22 7
32 7
33 7
34 7
7 6
2 6
8 6
, то выходное значение будет
7 3
, поскольку узел 7 имеет 3 входящих ребра из четных узлов.Узел 6 имеет только 2 таких входящих ребра и, так как 2 <3, он не попадает в выход.В выходных файлах ключ должен быть номером узла, а значение должно быть числом входящих ребер, которые он имеет от четных узлов. </p>
Это вывод, который я сейчас получаю в своих результатах.
"979" 4
"98" 21
"980" 53
"981" 24
"982" 36
"983" 29
"984" 21
"985" 4
"986" 4
"987" 2
"988" 16
"989" 14
"99" 3
"990" 22
"991" 7
"992" 13
"993" 65
"994" 10
"995" 27
"996" 0
"997" 43
"998" 4
"999" 35
Обратите внимание, что часть 2-го столбца -> sum (valuelist) -> меньше 3 ... это не то, что я хочу в качестве ожидаемого результата.