Package edu.cmu.graphchi.vertexdata

Source Code of edu.cmu.graphchi.vertexdata.VertexTransformer

package edu.cmu.graphchi.vertexdata;

import edu.cmu.graphchi.datablocks.BytesToValueConverter;
import edu.cmu.graphchi.datablocks.ChiPointer;
import edu.cmu.graphchi.datablocks.DataBlockManager;
import edu.cmu.graphchi.engine.auxdata.VertexData;

import java.io.*;
import java.util.Iterator;

/**
* Transforms vertex values to new values.
* @author Aapo Kyrola
*/
public class VertexTransformer {

    /**
     * Performs x -> y transformation to vertex values
     * @param numVertices   number of vertices in the graph (hint: use engine.numVertices())
     * @param baseFilename  name of the input graph
     * @param conv   bytes-to-vertex value converter
     * @param callback  callback performing the transform
     * @param <VertexDataType>
     * @throws IOException
     */
    public static <VertexDataType> void transform(int numVertices, String baseFilename, BytesToValueConverter<VertexDataType> conv,
                                                  VertexTransformCallBack<VertexDataType> callback) throws IOException {

        VertexData<VertexDataType> vertexData = new VertexData<VertexDataType>(numVertices, baseFilename, conv, true);

        DataBlockManager blockManager = new DataBlockManager();
        vertexData.setBlockManager(blockManager);

        int CHUNK = 1000000;
        for(int i=0; i < numVertices; i += CHUNK) {
            int en = i + CHUNK;
            if (en >= numVertices) en = numVertices - 1;
            int blockId =  vertexData.load(i, en);

            Iterator<Integer> iter = vertexData.currentIterator();

            while (iter.hasNext()) {
                int j = iter.next();
                ChiPointer ptr = vertexData.getVertexValuePtr(j, blockId);
                VertexDataType oldValue = blockManager.dereference(ptr, conv);
                VertexDataType newValue = callback.map(j, oldValue);
                blockManager.writeValue(ptr, conv, newValue);
            }
            vertexData.releaseAndCommit(i, blockId);
        }

    }
}
TOP

Related Classes of edu.cmu.graphchi.vertexdata.VertexTransformer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.