Mahout - Как сопоставить строковые идентификаторы с длинными для большого набора данных?

Я знаю, что если мы собираемся использовать рекомендательную библиотеку Mahout, независимо от того, распространяется она или нет, мы должны в первую очередь преобразовать идентификаторы String в длинные.

Если набор данных не слишком велик, все в порядке, я могу легко использовать таблицу в памяти или IDMigrator для сопоставления идентификатора String с длинными идентификаторами. Однако это задание преобразования строк в длинные становится узким местом, когда размер набора данных велик.

Например, предположим, что у меня 10 миллионов пользователей, даже если я могу очень быстро выполнять предварительную обработку данных и обучение модели на EMR. Мне все еще нужно пройти через все эти пользовательские идентификаторы String на какой-то одной машине, чтобы генерировать длинные идентификаторы для этих пользователей без коллизий, это, очевидно, не невозможно, если число пользователей продолжает расти.

Даже если я сохраню это сопоставление в какой-то базе данных, назначение длинных идентификаторов для новых пользователей все равно должно быть однопоточным, чтобы избежать назначения дубликатов идентификаторов, опять же, эта задача является узким местом, которое нельзя масштабировать.

Итак, есть ли лучший подход для сопоставления идентификатора строки с длинным идентификатором?


person shihpeng    schedule 13.05.2015    source источник


Ответы (1)


Подумайте о том, чтобы не выполнять все сопоставления String => Long на одной машине. Я не знаю специфики вашего идентификатора String, но, возможно, простая хэш-функция (например, из Hive) будет в порядке. Если нет, подумайте о том, чтобы сделать его самостоятельно (например, на основе MD5). Это должен быть самый простой подход. Поскольку у вас есть доступ к EMR, вы можете сопоставить каждый отдельный идентификатор перед запуском рекомендации, а затем повторно сопоставить его с исходной строкой.

person Bartłomiej Twardowski    schedule 13.05.2015