2

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

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

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

4

1 回答 1

4

InputReader 的目的通常是将作业拆分为每个实体的任务。您通常编写处理程序来处理传递给适当实体的每个任务。

您实际上并不需要 DatastoreOutputWriter,因为您可以简单地在任务中编写实体。mapreduce 库有一些工具可以通过使用异步 Put 来提高效率。推荐使用它们,但不使用它们的代码仍然可以工作。这是一个非常简单的处理程序,它进行了一些小修改并将实体写回映射器阶段:

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")
于 2013-05-08T14:01:57.093 回答