Python 如何使减速器仅发射重复项
我有一个映射器,它正在处理大量数据,并将ID号作为值为1的键发出。我希望通过MapReduce作业可以获得一个列表,其中包含在所有数据中多次找到的所有ID,这是一个重复ID的列表。例如: 映射器发射:Python 如何使减速器仅发射重复项,python,hadoop,mapreduce,reduce,Python,Hadoop,Mapreduce,Reduce,我有一个映射器,它正在处理大量数据,并将ID号作为值为1的键发出。我希望通过MapReduce作业可以获得一个列表,其中包含在所有数据中多次找到的所有ID,这是一个重复ID的列表。例如: 映射器发射: abc 1 efg 1 cba 1 abc 1 dhh 1 在本例中,您可以看到ID“abc”已由映射器发出多次 如何编辑此减速机,使其仅发射重复项?i、 e.值大于1的键: import sys import codecs sys.stdout = codecs.getwriter('utf
abc 1
efg 1
cba 1
abc 1
dhh 1
在本例中,您可以看到ID“abc”已由映射器发出多次 如何编辑此减速机,使其仅发射重复项?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))
你在几个地方犯了错误
if last_key and last_key != key:
sys.stdout.write("%s\t%s\n" % (last_key,tot_cnt))
应改为:
if last_key != key:
if(tot_cnt > 1):
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
if last_key and tot_cnt > 1:
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
您没有检查tot\u cnt>1
if last_key:
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
应改为:
if last_key != key:
if(tot_cnt > 1):
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
if last_key and tot_cnt > 1:
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
这里再次说明,您没有检查tot\u cnt>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 != key:
if(tot_cnt > 1):
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 and tot_cnt > 1:
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
对于您的数据,我得到以下输出:
abc 2
你在每次迭代中都要扔掉val,你需要做一个dict来累积值。好的!你能告诉我代码示例/它将放置在减速器中的什么位置吗?