Как я могу использовать API-код файла последовательности Mahout?

В Mahout существует команда для создания файла последовательности как bin/mahout seqdirectory -c UTF-8 -i <input address> -o <output address>. Я хочу использовать эту команду как код API.


person Arash Hosseinabady    schedule 25.07.2012    source источник


Ответы (1)


Вы можете сделать что-то вроде этого:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;


Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);

Path outputPath = new Path("c:\\temp");

Text key = new Text(); // Example, this can be another type of class
Text value = new Text(); // Example, this can be another type of class

SequenceFile.Writer writer = new SequenceFile.Writer(fs, conf, outputPath, key.getClass(), value.getClass());

while(condition) {

    key = Some text;
    value = Some text;

    writer.append(key, value);
}

writer.close();

Дополнительную информацию можно найти здесь и здесь

Кроме того, вы можете вызывать ту же самую функциональность, которую вы описали, из Mahout, используя org.apache.mahout.text.SequenceFilesFromDirectory

Тогда вызов выглядит примерно так:

ToolRunner.run(new SequenceFilesFromDirectory(), String[] args //your parameters);

ToolRunner происходит от org.apache.hadoop.util.ToolRunner

Надеюсь, это помогло.

person Julian Ortega    schedule 25.07.2012
comment
Вы также можете посмотреть здесь, где код использует как SequenceFile Writer, так и Reader. - person Julian Ortega; 25.07.2012
comment
Каков путь "appledata/apples" в Path path = new Path("appledata/apples"); в здесь. Если это адресная книга? - person Arash Hosseinabady; 26.07.2012
comment
Это может быть связано с Файловой системой Hadoop (HDFS). - person Julian Ortega; 26.07.2012
comment
Итак, как я могу установить адрес для этого? У меня нет больше информации об этом. - person Arash Hosseinabady; 26.07.2012
comment
Тогда вам не нужна HDFS, просто укажите локальный путь, куда вы хотите записать вывод. - person Julian Ortega; 26.07.2012
comment
Установите выход! Я хочу дать ему текст файла входного адреса и сохранить его sequence file в выходной адрес. Я хочу установить как входной, так и выходной адрес. - person Arash Hosseinabady; 26.07.2012
comment
Я уже говорил, как это сделать. Вы бы сделали что-то вроде этого ToolRunner.run(new SequenceFilesFromDirectory(), {"-c", "UTF-8", "-i", "c:\\inputPath", "-o", "c:\\outputPath"}); - person Julian Ortega; 26.07.2012
comment
Я использую ваш код. Но этот код не добавляет новый ввод в файл последовательности. При каждом запуске этого кода создавайте новый файл последовательности. - person Arash Hosseinabady; 07.08.2012
comment
Конечно, он создает новый файл последовательности. Код, который я представил, создает новый SequenceFile.Writer каждый раз, когда вы его запускаете, поэтому он действительно перезапишет все, что присутствует (если выходной путь тот же). Если вы хотите добавить новые данные в существующий файл последовательности, вам нужно создать собственный код. - person Julian Ortega; 08.08.2012