Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Apache Mahout-从字符串读取首选项值_Hadoop_Mahout - Fatal编程技术网

Hadoop Apache Mahout-从字符串读取首选项值

Hadoop Apache Mahout-从字符串读取首选项值,hadoop,mahout,Hadoop,Mahout,我的情况是,我有一个数据集,它由经典的UserID、ItemID和preference值组成,但它们都是字符串 我已经通过重写FileDataModel类(它是Mahout库的一部分)中的readItemIDFromString()和readUserIDFromString()方法来读取UserID和ItemID字符串。但是,如果我没有弄错的话,似乎不支持首选项值的转换 如果有人对解决这个问题的方法有什么意见,我将不胜感激 为了说明我的意思,下面是我的用户ID字符串“转换”的一个示例: 以及Ab

我的情况是,我有一个数据集,它由经典的UserID、ItemID和preference值组成,但它们都是字符串

我已经通过重写FileDataModel类(它是Mahout库的一部分)中的readItemIDFromString()和readUserIDFromString()方法来读取UserID和ItemID字符串。但是,如果我没有弄错的话,似乎不支持首选项值的转换

如果有人对解决这个问题的方法有什么意见,我将不胜感激

为了说明我的意思,下面是我的用户ID字符串“转换”的一个示例:

以及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);
}
}
公共类ItemMemIDMigrator扩展了AbstractIDMigrator{
私人FastByIDMap longToString;
公共项memidmigrator(){
this.longToString=新的FastByIDMap(10000);
}
公共void存储映射(长longID,字符串stringID){
longToString.put(长、弦);
}
public void singleInit(字符串stringID)抛出TasteException{
storeMapping(toLongID(stringID),stringID);
}
公共字符串ToString(长long-longID){
返回longToString.get(longID);
}
}

Mahout反对基于Hadoop的旧推荐程序。我们有一个更现代的产品,它基于一种新算法,称为相关交叉发生(CCO)。Its使用Spark构建,速度提高10倍,与查询服务器结合使用时可提供实时查询结果

此方法接收用户id和项目id的字符串,并生成具有相同id的结果,因此您不再需要管理这些字符串。你真的应该看看新系统,不知道旧系统支持多久

这里是Mahout文档:这里是:


所描述的整个系统,包括SDK、输入存储、模型训练和实时查询,都是ApachePredictionIO项目的一部分,以及用于PIO和“UniversalRecommender”的文档,这里:这里:

哦,太棒了!谢谢你让我知道,我一定会去看看的。太糟糕了,我的老师告诉全班同学在下节课之前要特别修理这个部分,哈哈!我们在新代码中所做的是保留一个BiMap(Guava中的一个东西),它充当字符串->int和int->字符串映射的双向hashmap。这允许您在内存中保留hashmaps,以将Mahout int行和列序号(从推荐程序获得的ID)转换为原始字符串。BiMap的增长与id的数量成比例,而不是数据量,并且查找也是O(log(n)),因此可以很好地扩展。这听起来是一个非常聪明的想法,我正在计算偏好值的计数?传入的数据是(用户id、事件、项目id)这些被视为“偏好”指标,UR使用多种类型的数据,但旧的Mahout推荐人和大多数推荐人只使用转换数据——电子商务案例中的购买。BIMAP必须是一个用户id到Mahout ordinal int的BIMAP,以及一个项目id到Mahout ordinal int/从Mahout ordinal int的BIMAP。
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);
}
}