2015-04-22 56 views
1

目前,我正在將普通的Java代碼轉換爲MapReduce結構HadoopHashMap上的Hadoop序列化和浮點[]

我想修改下面的類Graph,我仍然不知道如何序列化和反序列化HashMapfloat[]類型。代碼的一部分在下面。

代碼:

public class Graph implements WritableComparable, Cloneable { 
    private static long serialVersionUID = 3L; 
    public static int MAX_FREQUENCY = 3; 
    public static float[] freqWeight = { 1.0F, 1.6F, 2.0F }; 
    int nNodes; 
    int nEdges; 
    String strName; 
    HashMap<String, Node> nodes; 
    boolean isMCS; 
    String taxonomyName; 


@Override 
public void write(DataOutput out) throws IOException { 
    // TODO Auto-generated method stub 
    out.writeBoolean(isMCS); 
    out.writeInt(nEdges); 
    out.writeInt(nNodes); 
    out.writeLong(serialVersionUID); 
    out.writeInt(MAX_FREQUENCY); 
    out.writeBytes(strName); 
    out.writeBytes(taxonomyName); 
    //ArrayWritable a=new ArrayWritable(FloatWritable.class); 

    //HashMap 
    //float[] 
} 

@Override 
public void readFields(DataInput in) throws IOException { 
    // TODO Auto-generated method stub 
    isMCS=in.readBoolean(); 
    nEdges=in.readInt(); 
    nNodes=in.readInt(); 
    serialVersionUID=in.readLong(); 
    MAX_FREQUENCY=in.readInt(); 
    strName=in.readLine(); 
    taxonomyName=in.readLine(); 

    //HashMap 
    //float[] 
} 

@Override 
public int compareTo(Graph graph) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

......... 
+0

你可以縮進代碼,使其可讀嗎? –

+0

對不起,這是我第一次使用Stackoverflow。我明白你的意思。我可以在我的電腦中閱讀,只有與變量相關的行不縮進。但代碼仍然可讀。 – Aaron

回答

0

使用ArrayPrimitiveWritable:

// float[] floats 
new ArrayPrimitiveWritable(floats).write(out); 


ArrayPrimitiveWritable apw = (float[]) new ArrayPrimitiveWritable().readFields(in); 
float[] floats = (float[]) apw.get(); 

使用MapWritable的地圖。 MapWritable基本上是一個映射,其中鍵和值類型都是可寫的。像ArrayPrimiveWriatable一樣,MapWritable實現了用於序列化的readFiles()和write()方法。

+0

@Aaron爲你做了這個工作 –

+0

謝謝。它真的在寫作,但對於輸入它仍然無法正常工作。它表示沒有readFiles()函數,我用readField()代替,但它說不能從void轉換爲float []。非常感謝。在這種情況下如何編寫CompareTo()函數? – Aaron

+0

這是我的錯字......抱歉。修正了我的答案 –