new Path(outputCalc, "laplacian-" + (System.nanoTime() & 0xFF)));
L.setConf(new Configuration(conf));
// eigendecomposition (step 3)
int overshoot = (int) ((double) eigenrank * OVERSHOOT_MULTIPLIER);
LanczosState state = new LanczosState(L, eigenrank,
new DistributedLanczosSolver().getInitialVector(L));
DistributedRowMatrix U = performEigenDecomposition(conf, L, state, eigenrank, overshoot, outputCalc);
U.setConf(new Configuration(conf));
List<Double> eigenValues = Lists.newArrayList();
for(int i=0; i<eigenrank; i++) {
eigenValues.set(i, state.getSingularValue(i));
}
// here's where things get interesting: steps 4, 5, and 6 are unique
// to this algorithm, and depending on the final output, steps 1-3
// may be repeated as well