控え
ここ (Hadoopで動くPythonのMapReduceプログラムを書く)とかを眺めててなんとなく分かったような気になっているなど。
mapper
基本的に -input なソレを並列で mapper なプログラムの標準入力になるはず。サンプルの mapper はスペース区切りをタブ区切りにして標準出力に吐き出しているのみ。
どっちかというと格好良いのは reducer です。
reducer
入力は mapper の出力または reducer の出力になります。チャネルは標準入力。mapper の出力かもしれないし reducer の出力かもしれん、というあたりがナニ。
reducer.py を再掲。
#!/usr/bin/env python ##reducer.py __author__ = 'Nurul Ferdous <nurul@ferdo.us>' __version__ = '0.2.20' from operator import itemgetter import sys agregatedmarks = {} for line in sys.stdin: name, marks = line.rstrip().split('\t') try: if agregatedmarks.get(name): agregatedmarks.get(name).append(marks) else: agregatedmarks[name] = [marks] except ValueError: pass sortedmarksheet = sorted(agregatedmarks.items(), key=itemgetter(0)) for name, marks in sortedmarksheet: print '%s\t%s'% (name, marks)
ケツにあるソートは人間サマのためな模様。
早く
クラスタなナニが使えるようにならないかなぁ。