gpt4 book ai didi

python - 如何使Reducer仅发出重复项

转载 作者:行者123 更新时间:2023-12-02 21:31:04 27 4
gpt4 key购买 nike

我有一个Mapper,它正在处理大量数据并以ID值为1的形式散发ID号作为键。我希望通过MapReduce作业来完成的工作是获取所有ID已被多次查找的所有ID的列表。数据,这是重复ID的列表。例如:

映射器发出:

abc 1
efg 1
cba 1
abc 1
dhh 1

在这种情况下,您可以看到ID“abc”已被Mapper发出多次。

如何编辑此Reducer,使其仅发出重复副本?即值大于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))

    您没有检查tot_cnt > 1
  • 最后2行:
    if last_key:
    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_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

    关于python - 如何使Reducer仅发出重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233451/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com