如何将MapReduce结果写回数据存储区?我的第一个想法是“DatastoreOutputWriter”,但显然没有这样的东西。
澄清:问题不在于修改/保存实体。相反,我想处理它们,并将处理后的结果(不同类型的实体)存储在数据存储区中。
示例:不时计算用户数,并将结果保存到包含日期和计数的新实体中。
答案 0 :(得分:4)
InputReader的目的通常是将作业拆分为每个实体的任务。您通常会编写处理程序来处理通过相应实体的每个任务。
您实际上并不需要DatastoreOutputWriter,因为您只需在任务中编写实体即可。 mapreduce lib有一些工具可以通过使用异步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")