2012-07-01 50 views
2

我加载数据到亨利马乌0.7 RandomAccessSparseVector,我不知道如何序列化序列化RandomAccessSparseVector。如果我使用VectorWritable我可以使用SequenceFile.Writer像这样:在亨利马乌

writer = new SequenceFile.Writer(
    fs, conf, new Path("filename"), LongWritable.class, 
    VectorWritable.class); 

没有RandomAccessSparseVectorWritable,很遗憾。

一种选择是完全忘记稀疏矢量和数据加载到VectorWritable和序列化。我想避免这种情况,因为手动输入一个零负载到VectorWritable并且在序列化时会占用一堆磁盘空间。 RandomAccessSparseVector也不能投射到VectorWritable

如果它是任何使用的,我给自己定

Configuration conf = new Configuration(); 
conf.set("io.serializations", 
    "org.apache.hadoop.io.serializer.WritableSerialization"); 

,这样的Hadoop知道如何序列。

回答

3

该解决方案非常简单。经过一段时间没有通过API文档挖苦,我发现了一个有用的论坛帖子。 VectorWritable不是矢量类型,而是用于序列化的矢量包装。之前,我是想一RandomAccessSparseVector通过调用

key = new LongWritable(foo) 
RandomAccessSparseVector vect = new RandomAccessSparseVector(columns); 
writer.append(key, vect) 

像这样

RandomAccessSparseVector vect = new RandomAccessSparseVector(columns); 

产生写我所需要的是一个叫

writer.append(key, new VectorWritable(vect)) 
相关问题