DistributedLanczosSolver currently keeps all Lanczos vectors in memory on the driver (client) computer while Hadoop is iterating. The memory requirements of this is (desiredRank) * (numColumnsOfInput) * 8bytes, which for desiredRank = a few hundred, starts to cap out usefulness at some-small-number * millions of columns for most commodity hardware.
The solution (without doing stochastic decomposition) is to persist the Lanczos basis to disk, except for the most recent two vectors. Some care must be taken in the "orthogonalizeAgainstBasis()" method call, which uses the entire basis. This part would be slower this way.