2

MapReduce 결과를 데이터 저장소에 다시 쓰는 방법은 무엇입니까? 내 첫 번째 생각은 "DatastoreOutputWriter"였지만 분명히 그런 것은 없습니다.DatastoreOutputWriter와 같은 것이 있습니까?

설명 : 질문은 엔티티 수정/저장에 관한 것이 아닙니다. 대신, 나는 그들을 처리하고 처리 된 결과 (다른 종류의 엔티티)를 데이터 저장소에 저장하려고합니다.

예 : 사용자 수를 지금부터 세어보고 결과를 날짜와 수를 포함하는 새 엔티티에 저장하십시오.

답변

4

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") 
+0

덕분에,하지만 난 같은 엔티티를 수정하지 않습니다. 대신 처리하고 데이터 저장소에 처리 결과를 저장하려고합니다. 명확한 질문을보십시오. – pipacs

+0

dragonx의 대답을 다시 읽으십시오 : 나는 감속기에서 op.db.Put를 사용하여 데이터 저장소에 쓸 수 있다고 생각합니다. – pipacs

관련 문제