私はいくつかのマップはUbuntuで、commmandとのpython 2のコードを減らすテストしてい:Map Reduce:なぜこのコードは最大でも、最小ではないのに正しい出力を出すのですか?
cat testfile2 | ./mapper.py | sort | ./reducer.py
私はmaxの正しい出力を得ることが、もminではない、それはしていないかのように、私は分の値1を取得し、これまでの時間を元の値から変更されました。 'value'の値はすべて1より小さいので、forループの最初の反復ではminを最初の値に変更し、それ以降の反復でminを更新する必要があります。私は自分の心を失っているのですか、コードに愚かな間違いがありますか?助けてください!
#!/usr/bin/python
import sys
def reducer():
max = 0
min = 1
old_tuple = ('foo', 'bar')
i = 0
for line in sys.stdin:
data = line.strip().split("\t")
if len(data) != 3:
continue
city, year, value = data
new_tuple = (city, year)
if old_tuple != new_tuple:
if i != 0:
print "{0}\t{1}\t{2}\t{3}".format(old_tuple[0], old_tuple[1], max, min)
max = 0
min = 1
i += 1
old_tuple = new_tuple
if min > value:
min = value
if max < value:
max = value
if old_tuple != ('foo', 'bar'):
print "{0}\t{1}\t{2}\t{3}".format(old_tuple[0], old_tuple[1], max, min)
if __name__ == '__main__':
reducer()
出力Iは、まず私がキーワードである変数名として最小値と最大値を使用していたので、
Alert 2009 0.215236752 1
Winnipeg 2017 0.032557214 1
Pythonは私の言語ではありませんが、文字列 'value'を浮動小数点に変換するのを忘れてしまったようです。そのような変換がなければ、比較は辞書的に実行され、数値的には実行されません。 – gudok