mahou从1.0开始支持hadoop2.X,jdk需要1.7以上。
一、mahout中的向量
1、在mahout中,向量被实现为三个不同的类,每个类都是针对不同场景优化的:DenseVector、RandomAccessSparseVector和SequentialAccessSparseVector。
a、DenseVector可被视为一个double型数组,其大小为数据中的特征个数。因为不管数组的元素之是不是0,数组中所有元素都被预先分配了空间。我们称之为密集的(dense)。
b、RandomAccessSparseVector被实现为integer型和double型之间的一个HashMap,只有非零元素被分配空间。因此,这类向量被成为稀疏向量。
c、SequentialAccessSparseVector实现为两个并列的数组,一个是integer型另一个是double型。其中只保留了非零元素。与面向随机访问的RandomAccessSparseVector不同,它是为顺序读取而优化的。
2向量选择:
具体选择那种实现依赖于算法。如果算法要对向量的值做许多随机插入和更新,就适合使用像DenseVector和RandomAccessSparseVector这样支持快速随机访问的实现。另一方面,而对于像k-means聚类这样反复计算向量大小的算法,SequentialAccessSparseVector实现的执行速度就会比RandomAccessSparseVector更快。
3、Mahout文件向量化
- mahout seqdirectory:将文本文件转成SequenceFile(序列)文件,SequenceFile文件是一种二制制存储的key-value键值对,对应的源文件是org.apache.mahout.text.SequenceFilesFromDirecto
ry.java - mahout seq2sparse:将SequenceFile(序列)转成向量文件,对应的源文件是org.apache.mahout.vectorizer.SparseVectorsFromSequenc
eFiles.java -
命令: mahout seqdirectory -i /user/hadoop/file1 -o /user/hadoop/file2
查看转化结果:
-
mahout seqdumper:将SequenceFile文件转成文本形式,对应的源文件是org.apache.mahout.utils.SequenceFileDumper.java
- mahout vectordump:将向量文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.vectors.VectorDumper.java
- mahout clusterdump:分析最后聚类的输出结果,对应的源文件是org.apache.mahout.utils.clustering.ClusterDumper.java
-
命令: mahout vectordump -i /user/hadoop/file2 -o /user/hadoop/file3
- 具体每种命令如何用及参数如何选择,在命令行后面加-h或-help可以查看
3、
mahout rowid \
-i wikipedia-vectors/tfidf-vectors/part-r-00000
-o wikipedia-matrix
mahout rowsimilarity -i zh/matrix/matrix -o zh/similarity -ow -r 399996 --similarityClassname SIMILARITY_COSINE -m 50 -ess