2013-05-08 127 views
2

如何將MapReduce結果寫回數據存儲?我的第一個想法是「DatastoreOutputWriter」,但顯然沒有這樣的事情。有沒有像DatastoreOutputWriter的東西?

澄清:問題不在於修改/保存實體。相反,我想處理它們,並將處理後的結果(不同類型的實體)存儲在數據存儲區中。

示例:每隔不時計算用戶數量,然後將結果保存到包含日期和計數的新實體中。

回答

4

InputReader的目的通常是將作業分成每個實體的任務。您通常會編寫處理程序來處理通過相應實體的每個任務。

由於您只需在任務中寫入實體,您並不需要DatastoreOutputWriter。 mapreduce lib有一些工具,通過使用async Puts使它更高效一些。建議使用它們,但不使用它們的代碼仍然可以使用。這裏有一個非常簡單的處理程序,它會做一些小的修改,並將實體寫回映射階段:

def addNewAttribute(entity, *args, **kwargs): 
    try: 
     if not entity.get("newattribute"): 
      entity["newattribute"] = False 
      yield op.db.Put(entity) # save the entity back to datastore 
      yield op.counters.Increment("touched") # use mapreduce counter to track operations 
    except: 
     yield op.counters.Increment("touchFail") 
+0

謝謝,但我不想修改相同的實體。而是我想要處理它們,並將處理結果保存到數據存儲區。看到澄清的問題。 – pipacs 2013-05-08 15:19:16

+0

重新閱讀dragonx的答案:我想我可以使用op.db.Put從reducer寫入數據存儲區。 – pipacs 2013-05-09 08:51:15