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.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.Key; import com.google.appengine.tools.mapreduce.AppEngineMapper; /** * * This mapper changes all Strings to lowercase Strings, sets * a timestamp, and reputs them into the Datastore. The reason * this is a "Naive" Mapper is because it doesn't make use of * Mutation Pools, which can do these operations in batch instead * of individually. * * @author Ikai Lan * */ public class NaiveToLowercaseMapper extends AppEngineMapper<Key, Entity, NullWritable, NullWritable> { private static final Logger log = Logger .getLogger(NaiveToLowercaseMapper.class.getName()); private DatastoreService datastore; @Override public void taskSetup(Context context) { this.datastore = DatastoreServiceFactory.getDatastoreService(); } @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()); datastore.put(value); } } }