0
내가 Ikai 란 만든이 매퍼를 사용하고 있습니다 :또한이 Mapreduce 코드를 수정하여 엔터티의 네임 스페이스를 변경하려면 어떻게해야합니까?
package com.ikai.mapperdemo.mappers;
import java.util.Date;
import java.util.logging.Logger;
import org.apache.hadoop.io.NullWritable;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.tools.mapreduce.AppEngineMapper;
import com.google.appengine.tools.mapreduce.DatastoreMutationPool;
/**
*
* The functionality of this is exactly the same as in {@link NaiveToLowercaseMapper}.
* The advantage here is that since a {@link DatastoreMutationPool} is used, mutations
* can be done in batch, saving API calls.
*
* @author Ikai Lan
*
*/
public class PooledToLowercaseMapper extends
AppEngineMapper<Key, Entity, NullWritable, NullWritable> {
private static final Logger log = Logger
.getLogger(PooledToLowercaseMapper.class.getName());
@Override
public void map(Key key, Entity value, Context context) {
log.info("Mapping key: " + key);
if (value.hasProperty("comment")) {
String comment = (String) value.getProperty("comment");
comment = comment.toLowerCase();
value.setProperty("comment", comment);
value.setProperty("updatedAt", new Date());
DatastoreMutationPool mutationPool = this.getAppEngineContext(
context).getMutationPool();
mutationPool.put(value);
}
}
}
내가 또한 수정되는 엔티티의 데이터 저장소 네임 스페이스를 변경하는 위에 추가하고 싶은.
어떻게 가능합니까?
확인. 알아 둘만한. 그러나 실제 문제는이 MapReduce 코드 **의 컨텍스트에서 특정 네임 스페이스 **에서 엔티티를 만드는 방법을 모르겠다는 것입니다. 예를 들어, 다음과 같이 할 수 있습니다 :'Entity newOne = new Entity ("Kind", id);'새로운 엔티티를 생성하려면 -'네임 스페이스를 설정하는 방법을 모르겠습니다 .' 'getNamespace' 메소드는 있지만'setNamespace'는 없습니까? 네임 스페이스를 설정하기 위해'NamespaceManager'가 여기서 작동할까요? – Beatboxer
네임 스페이스 매니저가 필요합니다. '.get()'과'.set()'을 모두 가지고 있습니다. 엔티티가 생성되면 현재 네임 스페이스가 암시 적으로 사용됩니다. http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/NamespaceManager.html을 참조하십시오. –