MapReduce Python,似乎无法将标准通过管道传递到文本文件

时间:2018-09-21 15:09:27

标签: python mapreduce

首先,我是MapReduce的新手(实际上就在本周),并且作为我目前正在学习的课程的一部分来做,如果我犯了基本错误,请原谅我。

我尝试寻找问题的答案,但发现任何相关的东西。

我有一个文本行,其中数据很简单,例如:

Reg1, Yes
Reg2, No
Reg3, Yes
Reg4, Yes
Reg5, Yes
Reg6, Yes
Reg7, Yes
Reg8, No
Reg9, Yes
Reg10, Yes
Reg11, Yes
Reg12, Yes
Reg13, Yes
Reg14, No
Reg15, Yes

我想做的第一件事是计算是和否-这部分工作正常,但是如果是'否',则使用第二种模型将'reg'字词传递到文本文件中。在这种情况下,我读过某个地方最好看一下行而不是文字,这很有意义。

以下是我尝试获取执行此操作的映射器的方法:

import sys

for line in sys.stdin:

line = line.strip()

lines = line.split()

for line in lines:
    if 'Yes' in line:
        sys.stdout.write('%s\t%s\n' % (line,1))

    else:
        sys.stderr.write('%s\t%s\n' % (line,1))

    print('%s\t%s' % (line, 1))

但是结果输出是:

Reg1,   1
Reg2,   1
No  1
Reg3,   1
Reg4,   1
Reg5,   1
Reg6,   1
Reg7,   1
Reg8,   1
No  1
Reg9,   1
Reg10,  1
Reg11,  1
Reg12,  1
Reg13,  1
Reg14,  1
No  1
Reg15,  1

而我只希望输出为:

Reg2, No
Reg8, No
Reg14, No

任何人都可以指出我要去哪里了吗?这部分工作仅出于理论目的,这就是我使用Python的原因(此外,这也是导师演示的内容)

谢谢。

1 个答案:

答案 0 :(得分:0)

无需将行分成单词。 in运算符可以标识字符串中的子字符串。

然后您也不需要进行太多打印,最终您的代码将是

import sys

for line in sys.stdin:
    line = line.strip()
    if 'Yes' in line:
        # print(line) # we don't want to print the Yes lines
        pass
        # but if we want to leave the IF unchanged, then a pass instruction needs to fill it
    else:
        print(line)
        # if you want results to be pipe-able, comment line above, uncomment line below
        #sys.stdout.write(line)