我正在从.edges文件(facebook社交节点)获取数据。这些文件中的每一行表示图形中的一条边。例如,
123 95
意味着从节点123到节点95有一条边。对于每个节点x,我感兴趣的是来自偶数节点的传入边的数量。但我只对节点x感兴趣,它至少有3条来自偶数节点的传入边。
我的问题是,我已经尝试了不同的for循环,并且正在努力在结果中导出sum(valuelist)值,其中sum(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,所以它不会进入输出。在输出文件中,键应该是节点号,值应该是来自偶数节点的传入边数。
这是我现在在结果中得到的结果。
"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。。这不是我想要的预期输出。
1条答案
按热度按时间z9ju0rcb1#
你需要过滤掉减速机中的结果