2011-08-15 4 views
3

Приведенные данные в следующем формате (tag_uri image_uri image_uri image_uri ...), мне нужно, чтобы превратить их в формат Hadoop SequenceFile для дальнейшей обработки Mahout (например кластеризация)генерируя SequenceFile

http://flickr.com/photos/tags/100commentgroup http://flickr.com/photos/[email protected]/4019040356 http://flickr.com/photos/[email protected]/5651576112 
http://flickr.com/photos/tags/100faves http://flickr.com/photos/[email protected]/5441742937 
... 

До этого я превратит вход в csv (или arff) следующим образом:

http://flickr.com/photos/tags/100commentgroup,http://flickr.com/photos/tags/100faves,... 
0,1,... 
1,1,... 
... 

с каждой строкой описывает один тег. Затем файл arff преобразуется в векторный файл, используемый mahout для дальнейшей обработки. Я пытаюсь пропустить часть генерации arff и вместо этого создать последовательность. Если я не ошибаюсь, чтобы представить свои данные как sequenceFile, мне нужно будет хранить каждую строку данных с помощью $ tag_uri в качестве ключа, а затем $ image_vector как значение. Каков правильный способ сделать это (если возможно, могу ли я иметь tag_url для каждой строки, которая будет включена в файл последовательности где-нибудь)?

Некоторые ссылки, которые я нашел, но не уверен, если они имеют отношение:

  1. Writing a SequenceFile
  2. Formatting input matrix for svd matrix factorization (я могу хранить свою матрицу в таком виде?)
  3. RandomAccessSparseVector (учитывая, что я только список изображений которые назначаются данным тегом вместо всех изображений в строке, можно ли представить его с помощью этого вектора?)
  4. SequenceFile write
  5. SequenceFile explanation

ответ

5

Вам просто нужен SequenceFile.Writer, что объясняется в вашей ссылке # 4. Это позволяет записывать пары ключ-значение в файл. Конечно, ключ и ценность зависят от вашего варианта использования. Это совсем не то же самое для кластеризации против разложения матрицы по сравнению с совместной фильтрацией. Там нет одинSequenceFile формат.

Скорее всего, ключ или значение будет Mahout Vector. Вещь, которая умеет писать Vector, - VectorWritable. Это класс, который вы использовали бы для обертывания Vector и напишите его SequenceFile.Writer.

Вам нужно будет посмотреть на работу, которая будет потреблять ее, чтобы убедиться, что вы передаете то, что она ожидает. Для кластеризации, например, I думаю ключ игнорируется, а значение равно Vector.

+0

эй @sean, ты тот, кто ответил мне на прошлой неделе в списке рассылки? :) Спасибо за ответ. – Jeffrey04

+1

Да, это то же самое. –

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