Python 在这个MapReduce问题中,如何有选择地选择大于3的值之和?
我从.edges文件(Facebook社交节点)获取数据。这些文件中的每一行表示图形中的一条边。比如说, 12395 表示从节点123到节点95有一条边。对于每个节点X,我感兴趣的是来自偶数节点的传入边的数量。但我只对节点X感兴趣,它至少有3条来自偶数节点的传入边 我的问题是,我已经尝试了不同的for循环,并且正在努力在我的结果中导出sum(valuelist)值,其中sum(valuelist)仅大于或等于3Python 在这个MapReduce问题中,如何有选择地选择大于3的值之和?,python,hadoop,mapreduce,hdfs,Python,Hadoop,Mapreduce,Hdfs,我从.edges文件(Facebook社交节点)获取数据。这些文件中的每一行表示图形中的一条边。比如说, 12395 表示从节点123到节点95有一条边。对于每个节点X,我感兴趣的是来自偶数节点的传入边的数量。但我只对节点X感兴趣,它至少有3条来自偶数节点的传入边 我的问题是,我已经尝试了不同的for循环,并且正在努力在我的结果中导出sum(valuelist)值,其中sum(valuelist)仅大于或等于3 从mrjob.job导入mrjob 类字数(MRJob): def映射器(自身、键、
从mrjob.job导入mrjob
类字数(MRJob):
def映射器(自身、键、行):
def偶数_编号(钥匙):
如果浮动(键)%2==0:
返回真值
其他:
返回错误
split_word=line.split()
如果偶数(拆分字[0]):
收益率(拆分字[1],1)
def减速器(自身、键、值列表):
收益键,总和(值列表)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
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
请注意,第二列->总和(值列表)->中的一些值小于3。。这不是我想要的预期输出。您需要在reducer中过滤掉结果
def reducer(self, key, valuelist):
count = sum(valuelist)
if count >= 3:
yield key, count