有像DatastoreOutputWriter这样的东西吗?

时间:2013-05-08 13:08:55

标签: python google-app-engine mapreduce google-cloud-datastore

如何将MapReduce结果写回数据存储区?我的第一个想法是“DatastoreOutputWriter”,但显然没有这样的东西。

澄清:问题不在于修改/保存实体。相反,我想处理它们,并将处理后的结果(不同类型的实体)存储在数据存储区中。

示例:不时计算用户数,并将结果保存到包含日期和计数的新实体中。

1 个答案:

答案 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")