3

给定以下格式的数据(tag_uri image_uri image_uri image_uri ...),我需要将它们转换为 Hadoop SequenceFile 格式以供 Mahout 进一步处理(例如集群)

http://flickr.com/photos/tags/100commentgroup http://flickr.com/photos/34254318@N06/4019040356 http://flickr.com/photos/46857830@N03/5651576112
http://flickr.com/photos/tags/100faves http://flickr.com/photos/21207178@N07/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. 编写序列文件
  2. 为 svd 矩阵分解格式化输入矩阵(我可以以这种形式存储我的矩阵吗?)
  3. RandomAccessSparseVector(考虑到我只列出分配有给定标签的图像而不是一行中的所有图像,是否可以使用这个向量来表示它?)
  4. 序列文件写入
  5. 序列文件说明
4

1 回答 1

5

您只需要一个SequenceFile.Writer,这在您的链接 #4 中进行了说明。这使您可以将键值对写入文件。当然,关键和价值取决于您的用例。聚类、矩阵分解和协同过滤完全不一样。没有一种 SequenceFile格式。

键或值很可能是 Mahout Vector。知道如何写 a 的东西VectorVectorWritable. 这是你用来包装 aVector并用SequenceFile.Writer.

您需要查看将消耗它的工作,以确保您通过了它的预期。例如,对于集群,我认为键被忽略,值为 a Vector

于 2011-08-15T10:08:07.083 回答