the patch looks very good. I found out that being able to persist the resulting factorization is really a useful and necessary feature after I accidentally computed the wrong predictions after a 10 hour training run last week and my factorization was gone after the program terminated...
The only thing to reconsider in your patch IMHO would be how the factorization is persisted. I think it is better to have another class that can take a factorization and write it to some output than have the factorization persist itself. This would also give users the possibility to plug in their own customized persistance strategy. And I think I binary format would be better as default because it needs less memory.
Furthermore I think we should not introduce another SVDRecommender implementation (as this patch does with PersistentSVDRecommender) but rather modify the existing SVDRecommender. It has become a common pattern that our Recommender classes can be given "strategies" from outside so that users can control how different steps are done. An example of this would be org.apache.mahout.cf.taste.recommender.CandidateItemsStrategy which controls how the recommenders select the initial set of items that can possibly be recommended before those are ranked. I imagine that we could give a kind of "PersistanceStrategy" to the SVDRecommender which controls whether and how the factorization is persisted. A default could be not to persist it and we would supply an implementation that saves it to a file.
What do you think about these suggestions?