将city和temperature值转换为要在reducer文件中使用的变量

时间:2015-04-12 18:24:03

标签: python hadoop mapreduce

我正在尝试开发一个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)

2 个答案:

答案 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