から優先値を読み、アイテムIDと優先値は、しかし、彼らはすべての文字列です。のApache Mahoutのは - 私は、古典的なユーザーIDで構成されたデータセットを持っているような状況にいるよ文字列
私は、FileDataModelクラス(Mahoutライブラリの一部)のreadItemIDFromString()メソッドとreadUserIDFromString()メソッドをオーバーライドしてUserIDとItemID文字列を読み取ることができましたが、私が間違っていない場合の嗜好値の変換。
誰かがこの問題へのアプローチに何らかのインプットを持っていれば、私はそれを高く評価します。ここでは、私が何を意味するか説明するために
は私のユーザーID文字列「変換」の一例である:
@Override
protected long readUserIDFromString(String value) {
if (memIdMigtr == null) {
memIdMigtr = new ItemMemIDMigrator();
}
long retValue = memIdMigtr.toLongID(value);
if (null == memIdMigtr.toStringID(retValue)) {
try {
memIdMigtr.singleInit(value);
} catch (TasteException e) {
e.printStackTrace();
}
}
return retValue;
}
String getUserIDAsString(long userId) {
return memIdMigtr.toStringID(userId);
}
そしてAbstractIDMigratorの実装:
public class ItemMemIDMigrator extends AbstractIDMigrator {
private FastByIDMap<String> longToString;
public ItemMemIDMigrator() {
this.longToString = new FastByIDMap<String>(10000);
}
public void storeMapping(long longID, String stringID) {
longToString.put(longID, stringID);
}
public void singleInit(String stringID) throws TasteException {
storeMapping(toLongID(stringID), stringID);
}
public String toStringID(long longID) {
return longToString.get(longID);
}
}
ああどのように素晴らしいです!私に知らせてくれてありがとう、間違いなくそれをチェックします。あまりにも私の先生は、次のセッションまで、この部分を特に修正するように教えてくれました。 – CodeIsLife
私たちは新しいコードでやっていることはstring-> int型とINT->文字列のマッピングの双方向のHashMapとして働き2領域マップ(グアバ中のもの)を保持します。これは、元の文字列にMahoutのint型の行と列の序数(あなたが推薦者から入手ID)を変換するために、メモリ内のハッシュマップを維持することができます。 BiMapはIDの数に比例して増加し、データの量ではなく、参照はO(log(n))であるため、スケーリングがよくなります。 – pferrel
これはとてもスマートなアイデアのように聞こえますが、私は好みの値も考慮に入れていますか? – CodeIsLife