Я бы рекомендовал вручную прочитать записи из файла CSV, создать из них NamedVectors, а затем использовать средство записи файла последовательности для записи векторов в файл последовательности. С этого момента метод запуска KMeansDriver должен знать, как обрабатывать эти файлы.
Файлы последовательности кодируют пары ключ-значение, поэтому ключом будет идентификатор образца (это должна быть строка), а значением - обертка VectorWritable вокруг векторов.
Вот простой пример кода, как это сделать:
</p>
<pre> List<NamedVector> vector = new LinkedList<NamedVector>();
NamedVector v1;
v1 = new NamedVector(new DenseVector(new double[] {0.1, 0.2, 0.5}), "Item number one");
vector.add(v1);
Configuration config = new Configuration();
FileSystem fs = FileSystem.get(config);
Path path = new Path("datasamples/data");
//write a SequenceFile form a Vector
SequenceFile.Writer writer = new SequenceFile.Writer(fs, config, path, Text.class, VectorWritable.class);
VectorWritable vec = new VectorWritable();
for(NamedVector v:vector){
vec.set(v);
writer.append(new Text(v.getName()), v);
}
writer.close();
Кроме того, я бы рекомендовал прочитать главу 8 Mahout в действии . Это дает более подробную информацию о представлении данных в Mahout.