【问题标题】:Non-integer ids in Spark MLlib ALSSpark MLlib ALS 中的非整数 ID
【发布时间】:2016-11-08 14:57:59
【问题描述】:

我想使用

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 时,可能会产生错误。 我该如何解决这个问题?

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 这里,如果user和item的值都是String,行吗?字符串应该是什么格式的?
    • 我尝试了上面的示例,其中用户和项目值为字符串。当我执行.fit(ratingsDF) 时,我得到了异常java.lang.NullPointerException: Value at index 0 in null
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2015-07-20
    • 2015-08-24
    相关资源
    最近更新 更多