Amazon Elastic MapReduce を使った感じ

個人でも,気軽に大規模並列処理を試せます.一般的な個人には MapReduce の使いどころがないかもしれませんが,研究をしている方々には面白い素材になるのではないでしょうか.

これまでの簡単な実験では,コーパスから文字 n-gram を抽出するというタスクを試していました.とりあえず,計算機の割り当てを増やすことで,処理時間が短くなっていくということを確認できています.

# 今のところ,Mapper には何の工夫もしていないこと,ローカルでは C++ で専用に開発したプログラムが使えること,などの差があるため,Amazon Elastic MapReduce で最も安い計算機を 10 台割り当てるより,ローカルで処理した方が高速です.

他に思ったこととしては,Python を使うと,とても簡単に Unicode (UTF-8) の正規化ができて便利ということでしょうか.

import codecs
import sys
import unicodedata

for line in sys.stdin:
  try:
    unicode_line = u' '.join(unicode(line, 'utf-8').split())
  except:
    # Ignores line which contains invalid bytes.
    continue

  # Normalizes unicode string.
  normalized_line = unicodedata.normalize('NFKC', unicode_line)