All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tinkerpop.gremlin.hadoop.process.computer.util.MemoryMapReduce Maven / Gradle / Ivy

The newest version!
package com.tinkerpop.gremlin.hadoop.process.computer.util;

import com.tinkerpop.gremlin.hadoop.Constants;
import com.tinkerpop.gremlin.process.computer.KeyValue;
import com.tinkerpop.gremlin.process.computer.MapReduce;
import com.tinkerpop.gremlin.process.computer.Memory;
import com.tinkerpop.gremlin.process.computer.util.GraphComputerHelper;
import com.tinkerpop.gremlin.process.computer.util.MapMemory;
import com.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import com.tinkerpop.gremlin.structure.Vertex;
import com.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.commons.configuration.Configuration;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 * @author Marko A. Rodriguez (http://markorodriguez.com)
 */
public class MemoryMapReduce extends StaticMapReduce {

    public Set memoryKeys = new HashSet<>();

    @Override
    public String getMemoryKey() {
        return Constants.SYSTEM_MEMORY;
    }

    private MemoryMapReduce() {

    }

    public MemoryMapReduce(final Set memoryKeys) {
        this.memoryKeys = memoryKeys;
    }

    @Override
    public void storeState(final Configuration configuration) {
        super.storeState(configuration);
        configuration.setProperty(Constants.GREMLIN_HADOOP_MEMORY_KEYS, new ArrayList<>(this.memoryKeys.size()));
    }

    @Override
    public void loadState(final Configuration configuration) {
        this.memoryKeys = new HashSet((List) configuration.getList(Constants.GREMLIN_HADOOP_MEMORY_KEYS));
    }

    @Override
    public boolean doStage(final Stage stage) {
        return true;
    }

    @Override
    public void map(final Vertex vertex, final MapEmitter emitter) {
        final MapMemory mapMemory = vertex.property(Constants.MAP_MEMORY).orElse(new MapMemory());
        emitter.emit(mapMemory);
    }

    @Override
    public void combine(final NullObject key, final Iterator values, final ReduceEmitter emitter) {
        this.reduce(key, values, emitter);
    }

    @Override
    public void reduce(final NullObject key, final Iterator values, final ReduceEmitter emitter) {
        emitter.emit(key, values.next());
    }

    @Override
    public MapMemory generateFinalResult(final Iterator> keyValues) {
        return keyValues.next().getValue();
    }

    @Override
    public void addResultToMemory(final Memory.Admin memory, final Iterator> keyValues) {
        final MapMemory temp = keyValues.next().getValue();
        temp.asMap().forEach(memory::set);
        memory.setIteration(temp.getIteration());
        memory.setRuntime(temp.getRuntime());
    }

    @Override
    public int hashCode() {
        return (this.getClass().getCanonicalName() + Constants.SYSTEM_MEMORY).hashCode();
    }

    @Override
    public boolean equals(final Object object) {
        return GraphComputerHelper.areEqual(this, object);
    }

    @Override
    public String toString() {
        return StringFactory.mapReduceString(this, this.memoryKeys.toString());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy