2016-07-06 2 views
1

Я хотел бы использоватьНецелочисленные Идентификаторы в Спарк MLlib ALS

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) 

Однако пользовательские данные я получаю сохраняются дольше. При переключении на int это может привести к ошибке. Как я могу решить проблему?

ответ

1

Вы можете использовать одну из реализаций ML, которые поддерживают метки Long. 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) 
+0

Здесь, если данные, введенные пользователем и пункт струнные, будет ли он Работа? В каком формате должна быть строка? – void

+0

Я попробовал приведенный выше пример с именем пользователя и элемента как String. и я получаю исключение 'java.lang.NullPointerException: значение в индексе 0 в нуле, когда я делаю' .fit (ratedDF) ' – void

Смежные вопросы