package org.infinispan.server.test.task.servertask;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.infinispan.Cache;
import org.infinispan.stream.CacheCollectors;
import org.infinispan.tasks.ServerTask;
import org.infinispan.tasks.TaskContext;
/**
* MapReduce Server task to run in local mode.
*
* @author amanukya
*/
public class LocalMapReduceServerTask implements ServerTask {
public static final String NAME = "local_mapreduce_task";
private TaskContext taskContext;
@Override
public String getName() {
return NAME;
}
@Override
public Object call() throws Exception {
Cache<String, String> cache = (Cache<String, String>) taskContext.getCache().get();
return cache.entrySet().stream()
.map((Serializable & Function<Map.Entry<String, String>, String[]>) e -> e.getValue().split("\\s+"))
.flatMap((Serializable & Function<String[], Stream<String>>) Arrays::stream)
.collect(CacheCollectors.serializableCollector(
() -> Collectors.groupingBy(Function.identity(), Collectors.counting())));
}
@Override
public void setTaskContext(TaskContext taskContext) {
this.taskContext = taskContext;
}
}