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