Spark MLlib ALS中的非整数ID

时间:2016-07-06 14:04:21

标签: scala apache-spark apache-spark-mllib

我想使用

val ratings = data.map(_.split(',') match {
      case Array(user,item,rate)
      =>
        Rating(user.toInt,item.toInt,rate.toFloat)
    })
val model =  ALS.train(ratings,rank,numIterations,alpha)

但是,我得到的用户数据存储为Long。切换到int时,可能会产生错误。 我该怎么做才能解决问题?

1 个答案:

答案 0 :(得分:1)

您可以使用支持Long标签的ML实现之一。 RDD版本与其他实现相比,它的用户友好性显着降低:

import org.apache.spark.ml.recommendation.ALS
import org.apache.spark.ml.recommendation.ALS.Rating

val ratings = sc.parallelize(Seq(Rating(1L, 2L, 3.0f), Rating(2L, 3L, 5.0f)))

val (userFactors, itemFactors) = ALS.train(ratings)

并仅返回因素,但DataFrame版本返回模型:

val ratingsDF= ratings.toDF

val alsModel = new ALS().fit(ratingsDF)