【发布时间】:2017-03-21 23:17:30
【问题描述】:
我的数据集包含经典的 UserID、ItemID 和偏好值,但它们都是字符串。
我已经设法通过覆盖 FileDataModel 类(它是 Mahout 库的一部分)中的 readItemIDFromString() 和 readUserIDFromString() 方法来读取 UserID 和 ItemID 字符串,但是,似乎没有任何支持转换如果我没记错的话。
如果有人对如何解决这个问题有一些意见,我将不胜感激。
为了说明我的意思,这里是我的 UserID 字符串“Conversion”的示例:
@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);
}
}
【问题讨论】: