Mahout转置矩阵

时间:2014-03-04 15:14:17

标签: hadoop mahout transpose

我是Mahout的新人。 我正在尝试使用Mahout transpose命令行转置矩阵。

我的数据源文件中的每一行看起来像:1;456;789;012;.... .键是每行中的第一个元素(在此示例中为“1”)。每一行都是矩阵的向量。

我尝试用“,”或空格“”更改分隔符,但我不起作用。

为了转置矩阵,我开始使用以下命令在序列文件中转换我的hdfs数据文件:

mahout seqdirectory -c utf-8 -i /test/myfile -p /test/myfile_seq

然后我尝试使用此命令将我的序列文件转换为向量:

mahout seq2sparse -i /test/myfile_seq/chunk-0 -o /test/myfile_vector

然后转移我使用了这个命令:

sudo -u hdfs mahout transpose --input  /test/myfile_vector//tfidf-vectors/part-r-00000 --numRows 5 --numCols 24

我有几个问题:

- What is the separator to use in the data file source
- What should be the output of the "mahout seqdirectory" command?
- Did I need to convert my sequence file to vectors to transpose?

1 个答案:

答案 0 :(得分:0)

请将Mahout相关问题发布到Mahout用户@邮件列表,以便从Mahout提交者那里获得更快速,更明确的答案。

Mahout的TransposeJob期望矩阵作为输入,并且不会像你拥有的那样对单个向量起作用。 输入格式是什么并不重要。您可以拥有一个CSV文件并解析每一行。

以下是您试图完成的步骤的顺序:

  1. 将输入的CSV文件转换为命名向量,其中VectorId将成为您案例中的Key。查看Mahout的CSVIterator的代码并调整它以处理命名向量并从您的输入中解析每一行。
  2. 在NamedVectors上运行Mahout的RowIdJob,以创建所有向量的矩阵。矩阵的每一行都是您输入的一行。 RowIDJob的输出是 - matrix和docIndex。

    矩阵 - 所有向量的所有连接矩阵的矩阵m * n矩阵 docIndex - documentId到documentName的映射(在个案中它将documentId映射到ur键)

  3. 将上一步的矩阵输出作为输入提供给TransposeJob。您需要为CLI指定行数和列数。

  4. 如果您还有其他问题,请发送给Mahout用户@。