我有一个Map器,它将遍历大量数据,并将id号作为值为1的键发出。我希望通过mapreduce作业可以获得一个列表,其中包含在所有数据中多次找到的所有id,这是一个重复id的列表。例如:
Map器发射:
1
efg 1号机组
cba 1级
1
dhh 1号
在这种情况下,您可以看到id“”已被Map器发出多次。
如何编辑这个减速机,使它只发射重复的?i、 e.值大于1的键:
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
inData = codecs.getreader('utf-8')(sys.stdin)
(last_key, tot_cnt) = (None, 0)
for line in inData:
(key, val) = line.strip().split("\t")
if last_key and last_key != key:
sys.stdout.write("%s\t%s\n" % (last_key,tot_cnt))
(last_key, tot_cnt) = (key, int(val))
else:
(last_key, tot_cnt) = (key, tot_cnt + int(val))
if last_key:
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
1条答案
按热度按时间gupuwyp21#
你在一些地方犯了错误。
此代码:
应更改为:
你没有检查
tot_cnt > 1
.最后2行:
应更改为:
再说一遍,你没有检查
tot_cnt > 1
.下面是修改后的代码,对我很有用:
对于您的数据,我得到以下输出: