[MLLIB] [PYTHON] SPARK-4221: Expose nonnegative ALS in the python API

SPARK-1553 added alternating nonnegative least squares to MLLib, however it's not possible to access it via the python API.  This pull request resolves that.

I'll move it to the end. 

The issue is that it would be nice to preserve the nanosecond level time seed that scala uses, but I couldn't find a way to do that directly in python and just pass it through. So I created the extra stub to let scala do it itself. 

> On Nov 5, 2014, at 6:06 PM, Davies Liu <notifications@github.com> wrote:
> 
> In mllib/src/main/scala/org/apache/spark/mllib/api/python/PythonMLLibAPI.scala:
> 
> > @@ -278,8 +278,28 @@ class PythonMLLibAPI extends Serializable {
> >        rank: Int,
> >        iterations: Int,
> >        lambda: Double,
> > -      blocks: Int): MatrixFactorizationModel = {
> > -    new MatrixFactorizationModelWrapper(ALS.train(ratings.rdd, rank, iterations, lambda, blocks))
> > +      blocks: Int,
> > +      seed: Long,
> We could use java.lang.Long for seed, then seed can be null (means not specified), then we do not need another stub.
> 
> Also, putting seed in the end may be better (seed is optional).
> 
> —
> Reply to this email directly or view it on GitHub.
>