#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. Первое кажется довольно разумным решением. Однако я не был уверен в диапазоне моих значений. Я был уверен, что за один раз нужно было учитывать только несколько миллионов. Поэтому я просто создал для них свою собственную таблицу поиска.