我正在尝试开发一个mapreduce程序,以便从文本文件中显示城市的最高温度。
我的Temperatures.txt文件格式为:
City1 10
城市2 12
...
我已经将mapper.py文件的工作原理如下:
import sys
for line in sys.stdin:
line = line.strip()
print line
但我不想做print line
而是做这样的事情:
print '%s\t%s' % (city ,temperature)
因为开发reducer.py文件我需要这个,所以我的问题是如果你知道我怎么能在我的mapper.py文件中获取每一行并将城市名称放在我的变量city和温度里面我的变量温度,像这样:
import sys
for line in sys.stdin:
line = line.strip()
words = line.split()
for word in words:
city = # how can i get this?
temperature = # how can i get this?
print line
# so i can show the resut like this
print '%s\t%s' % (city ,temperature)
答案 0 :(得分:1)
您可以使用以下代码
import sys
for line in sys.stdin:
words = line.split()
if len(words) < 2:
continue;
city = words[:-1]
city = ''.join(city)
temperature = words[-1]
print line
# so i can show the resut like this
print '%s\t%s' % (city ,temperature)
答案 1 :(得分:1)
如果城市和临时都在每一行,你需要从线上获取它们:
import sys
for line in sys.stdin:
city, temperature = line.rsplit(None, 1)
print '%s\t%s' % (city ,temperature)
您还应该使用rsplit
,并且只对其名称中包含多个单词的城市进行一次拆分。
如果文件中有空行,您还需要捕获它们:
for line in sys.stdin:
if line.strip():
city, temperature = line.rsplit(None, 1)
print '%s\t%s' % (city ,temperature)
或者使用try / except:
import sys
for line in sys.stdin:
try:
city, temperature = line.rsplit(None, 1)
print '%s\t%s' % (city ,temperature)
except ValueError:
continue