code: def train(cls, ratings, rank, iterations=5, lambda_=0.01, blocks=-1, nonnegative=False,
                seed=None):
          
          model = callMLlibFunc("trainALSModel", cls._prepare(ratings), rank, iterations,
                                lambda_, blocks, nonnegative, seed)
          return MatrixFactorizationModel(model)
docs: Train a matrix factorization model given an RDD of ratings by users
          for a subset of products. The ratings matrix is approximated as the
          product of two lower-rank matrices of a given rank (number of
          features). To solve for these features, ALS is run iteratively with
          a configurable level of parallelism.
  
          :param ratings:
            RDD of `Rating` or (userID, productID, rating) tuple.
          :param rank:
            Number of features to use (also referred to as the number of latent factors).
          :param iterations:
            Number of iterations of ALS.
            (default: 5)
          :param lambda_:
            Regularization parameter.
            (default: 0.01)
          :param blocks:
            Number of blocks used to parallelize the computation. A value
            of -1 will use an auto-configured number of blocks.
            (default: -1)
          :param nonnegative:
            A value of True will solve least-squares with nonnegativity
            constraints.
            (default: False)
          :param seed:
            Random seed for initial matrix factorization model. A value
            of None will use system time as the seed.
            (default: None)