2
如何將MapReduce結果寫回數據存儲?我的第一個想法是「DatastoreOutputWriter」,但顯然沒有這樣的事情。有沒有像DatastoreOutputWriter的東西?
澄清:問題不在於修改/保存實體。相反,我想處理它們,並將處理後的結果(不同類型的實體)存儲在數據存儲區中。
示例:每隔不時計算用戶數量,然後將結果保存到包含日期和計數的新實體中。
如何將MapReduce結果寫回數據存儲?我的第一個想法是「DatastoreOutputWriter」,但顯然沒有這樣的事情。有沒有像DatastoreOutputWriter的東西?
澄清:問題不在於修改/保存實體。相反,我想處理它們,並將處理後的結果(不同類型的實體)存儲在數據存儲區中。
示例:每隔不時計算用戶數量,然後將結果保存到包含日期和計數的新實體中。
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")
謝謝,但我不想修改相同的實體。而是我想要處理它們,並將處理結果保存到數據存儲區。看到澄清的問題。 – pipacs 2013-05-08 15:19:16
重新閱讀dragonx的答案:我想我可以使用op.db.Put從reducer寫入數據存儲區。 – pipacs 2013-05-09 08:51:15