31章マップリデュース――MapReduceMapReduce

制約

  • 入力データはいくつかのブロックに分割される。
  • マップ関数は与えられたワーカー関数を各ブロックに適用する。それぞれのワーカー関数を並列に実行しても構わない。
  • リデュース関数は多数のワーカー関数の実行結果を受け取り、一貫した出力に再結合する。

プログラム

 1 #!/usr/bin/env python
 2 import sys, re, operator, string
 3 from functools import reduce
 4 #
 5 # マップ、リデュースのワーカー関数
 6 #
 7 def partition(data_str, nlines):
 8     """
 9     入力されたdata_str(大きな文字列)を
10     nlines行ごとのブロックに分割する
11     """
12     lines = data_str.split('\n')
13     for i in range(0, len(lines), nlines):
14         yield '\n'.join(lines[i : i + nlines])
15
16 def split_words(data_str):
17     """
18     文字列を受け取り、その中の単語それぞれに対して
19     次の形式の(単語, 1)組のリストを返す
20     [(w1, 1), (w2, 1), ..., (wn, 1)]
21     """
22 def _scan(str_data): ...

Get プログラミング文体練習 ―Pythonで学ぶ40のプログラミングスタイル now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.