giraph中改進**,想在edge上面加點屬性,結果發現修改後的值無法生效,pagereank用的edgenovalue類中增加乙個屬性,但是始終讀不出來值,
開始以為是使用int導致型別中間沒有進行readfiles或者write的序列化問題, 但是edgenovalue根本沒有相關方法,
且實際初始化使用的是 writableutils.reinitializevertexfromdatainput( //實際讀入頂點值和邊值的函式
extendeddatainput, vertex, configuration)方法;
然後開始列印每條邊物件的hashcode值, 結果發現每次都不一樣,於是就懵逼了,為啥?
許久後終於發現defaultvertex 的outedgesedges 型別居然是bytearrayedges,進去後檢視發現:
private byte serializededges;
@override
public void add(edgeedge) catch (ioexception e)
serializededges = extendeddataoutput.getbytearray();
serializededgesbytesused = extendeddataoutput.getpos();
++edgecount;
}
private class bytearrayedgeiterator
extends unmodifiableiterator>
@override
public edgenext() catch (ioexception e)
return representativeedge;
}}
淚奔。。。 原來該方法為了節省邊的記憶體空間,每次讀入讀出都進行了序列化操作,妹的難怪每次生成的邊物件都不一樣。。。 都是
representativeedge
物件,能一樣麼 妹的。。。。。。。。。。。。。。。。。。。。
我的方法需要在邊上增加屬性,所以換成邊物件更符合我需求,改為arraylistedges :
giraph.outedgesclass
org.apache.giraph.edge.arraylistedges
問題解決。
解決了乙個小問題
原來在debian上使用mplayer w32codecs一直彈出 error could not open required directshow codec drvc.so 的惱人的小問題,今天google了一下,參照fc6下mplayer安裝 執行 發現也有乙個類似libstdc so.5 n...
頭疼了乙個小時就為這個
同時用vim開啟.h和.cpp檔案看起來比較方便,於是想寫個vim指令碼來解決一下。可是竟連個簡單的function都出錯。function myfoo let filename getreg let pos strridx filename,return strpart filename,0,po...
解決了乙個連線mysql特別慢的問題
最近使用了一台ucloud的雲主機作為測試伺服器 用了以後發現了乙個問題 假設我的資料庫伺服器為d 我的應用伺服器為a 新的這臺雲主機位c 這三颱機器都不在乙個機房 問題是這樣的 從a鏈結到d,沒有問題,但是從c鏈結到d,非常慢,要將近20秒才有響應 一開始使用a鏈結d沒問題,我認為問題出在c上面 ...