Передача длинных значений в метод MLlib Rating()

#scala #apache-spark #apache-spark-mllib

#scala #apache-spark #apache-spark-mllib

Вопрос:

Я пытаюсь создать систему рекомендаций, используя библиотеку MLlib от Spark. (с использованием Scala) Чтобы иметь возможность использовать метод обучения ALS, мне нужно построить рейтинговую матрицу с использованием метода Rating() (который является частью пакета org.apache.spark.mllib.recommendation .Рейтинг). Метод требует передачи int в качестве идентификатора пользователя. Однако набор данных, с которым я работаю, имеет 11-значный идентификатор и, следовательно, выдает ошибку, когда я пытаюсь его передать.

Кто-нибудь знает, есть ли какой-нибудь способ обойти это, где я могу передать длинное значение в метод Rating? Или как-то переопределить этот метод? Или каким-либо образом однозначно преобразовать 11-значное число в 10 или 9 цифр, сохраняя при этом значение int?

Любая помощь будет принята с благодарностью. Спасибо

Ответ №1:

Я думаю, это будет зависеть от диапазона ваших идентификаторов. Можете ли вы просто взять идентификатор по модулю Int.MaxValue? Это:

 (id % Int.MaxValue).toInt
 

или вы можете просто хэшировать его в Int?

 id.hashCode
 

Комментарии:

1. Первое кажется довольно разумным решением. Однако я не был уверен в диапазоне моих значений. Я был уверен, что за один раз нужно было учитывать только несколько миллионов. Поэтому я просто создал для них свою собственную таблицу поиска.