首先,我是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的原因(此外,这也是导师演示的内容)
谢谢。
答案 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)