2012-07-01 53 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)) 
相關問題