一定要自己踢過一次鐵板才能學會 (二)
![圖片](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOVL2vomKgIDbzaYVYshMYCxC4FLh1Kl-j88IqHqm71FBQiZWgYZug_a64oTaKkX8uWw4tz33G-jKas645unURYTLKRaDwh6y6vRmsMi0D1IuJ4OSdOZVWt0W2MgSRRMTbPxNj/s640/Screen+shot+2010-08-25+at+8.15.17+PM.png)
經過一夜的蒐集資料, 看了 Google I/O 的影片, 覺得用 MapReduce 就是正解啦. 用法很簡單 Step 1 Download最新的 MapReduce , 在local自己的appengine程式的地方執行. svn checkout http : //appengine-mapreduce.googlecode.com/svn/trunk/python/src/mapreduce Step 2 修改app.yaml, 固定都是加上下列這段code. - url: /mapreduce(/.*)? script: mapreduce/main.py login: admin Step 3 新增一個mapreduce.yaml檔 mapreduce: - name: Count the number of entities mapper: input_reader: mapreduce.input_readers.DatastoreInputReader handler: jobs.process params: - name: entity_kind default: main.Report 第一個name, 就是之後會顯示在mapreduce的網頁介面上的job name. input_reader, 目前有四種reader可以選, 詳情可見 這裡 . 主要是從DataStore裡抓, 或是從BlobStore裡抓, 或是從zip檔裡抓資料. handler, 指定之後會被MapReduce call的function. 這裡有點tricky, 文件寫得不是很清楚, 查了MapReduce的source才知道要填什麼. 簡單的說它可以吃三四種格式, 會試著用不同的方法去找到對應的python檔, class定義跟function定義. 最簡單的方法就是"file.function". 像這裡就是有一個叫jobs.py的檔, 裡面有一個process(). 之後MapReduce就會一直重覆地呼叫這個function. param, 這裡可以指定一些參數, 最重要的是entity_kind這個欄位, 這裡指定了預設值是main.py裡定義的R