in datafu-pig/src/main/java/datafu/pig/linkanalysis/PageRank.java [296:354]
public DataBag getValue()
{
if (aborted)
{
return null;
}
System.out.println(String.format("Nodes: %d, Edges: %d", graph.nodeCount(), graph.edgeCount()));
ProgressIndicator progressIndicator = getProgressIndicator();
System.out.println("Finished loading graph.");
long startTime = System.nanoTime();
System.out.println("Initializing.");
try
{
graph.init(progressIndicator);
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
System.out.println(String.format("Done, took %f ms", (System.nanoTime() - startTime)/10.0e6));
float totalDiff;
int iter = 0;
System.out.println("Beginning iterations");
startTime = System.nanoTime();
do
{
// TODO log percentage complete every 5 minutes
try
{
totalDiff = graph.nextIteration(progressIndicator);
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
iter++;
} while(iter < maxIters && totalDiff > tolerance);
System.out.println(String.format("Done, %d iterations took %f ms", iter, (System.nanoTime() - startTime)/10.0e6));
DataBag output = bagFactory.newDefaultBag();
for (Int2IntMap.Entry node : graph.getNodeIds())
{
int nodeId = node.getIntKey();
float rank = graph.getNodeRank(nodeId);
List nodeData = new ArrayList(2);
nodeData.add(nodeId);
nodeData.add(rank);
output.add(tupleFactory.newTuple(nodeData));
}
return output;
}