Mahout: отсутствует класс для создания файлов последовательности
Я следую инструкциям на сайте mahout для преобразования существующего файла в файл последовательности:
VectorWriter vectorWriter = SequenceFile.createWriter(filesystem,
configuration,
outfile,
LongWritable.class,
SparseVector.class);
long numDocs = vectorWriter.write(new VectorIterable(), Long.MAX_VALUE);
Я включил банку с mahout в свой проект maven:
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.9</version>
</dependency>
Но это не будет писать файл.
Я получаю эту ошибку:
Caused by: java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.io.SequenceFile$Writer.init(SequenceFile.java:963)
at org.apache.hadoop.io.SequenceFile$RecordCompressWriter.<init>(SequenceFile.java:1136)
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:397)
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:284)
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:265)
что после дальнейшего расследования вызвано:
Serilization class not found: java.lang.ClassNotFoundException: org.apache.hadoop.io.serializer.WritableSerialization
Это наводит меня на мысль, что я скучаю по банке - кто-нибудь знает какую?
1 ответ
Проблема заключалась в том, что я использовал его в Lenskit, и Configuration
класс пытается использовать Thread.currentThread().getContextClassLoader()
который (по любой причине) не имеет пакетов mahout или hadoop. Полный код:
final Configuration configuration = new Configuration();
configuration.setClassLoader(Configuration.class.getClassLoader());
final Path path = new Path(POINTS_PATH + "/pointsFile");
LocalFileSystem fs = new LocalFileSystem();
fs.initialize(URI.create(POINTS_PATH + "/pointsFile"), configuration);
final SequenceFile.Writer writer =
SequenceFile.createWriter(
fs,
configuration,
path,
Text.class,
VectorWritable.class);