Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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
Java Mahout:读取自定义输入文件_Java_Hadoop_Mahout - Fatal编程技术网

Java Mahout:读取自定义输入文件

Java Mahout:读取自定义输入文件,java,hadoop,mahout,Java,Hadoop,Mahout,我在玩Mahout时发现FileDataModel接受格式为的数据 userId,itemId,pref(long,long,Double). String,long,double 我有一些格式的数据 userId,itemId,pref(long,long,Double). String,long,double 在Mahout上使用此数据集的最佳/最简单的方法是什么?假设您的输入适合内存,循环使用它。跟踪字典中每个字符串的ID。如果它不适合内

我在玩Mahout时发现FileDataModel接受格式为的数据

     userId,itemId,pref(long,long,Double).
     String,long,double 
我有一些格式的数据

     userId,itemId,pref(long,long,Double).
     String,long,double 

在Mahout上使用此数据集的最佳/最简单的方法是什么?

假设您的输入适合内存,循环使用它。跟踪字典中每个字符串的ID。如果它不适合内存,使用sort,然后分组来完成相同的想法

在python中:

导入系统

import sys

next_id = 0
str_to_id = {}
for line in sys.stdin:
    fields = line.strip().split(',')
    this_id = str_to_id.get(fields[0])
    if this_id is None:
        next_id += 1
        this_id = next_id
        str_to_id[fields[0]] = this_id
    fields[0] = str(this_id)

    print ','.join(fields)

一种方法是创建的扩展。您需要重写该方法以使用某种解析器进行转换。正如Sean所建议的,您可以使用的实现之一

例如,假设您有一个已初始化的,您可以执行以下操作:

@Override
protected long readUserIDFromString(String stringID) {
    long result = memoryIDMigrator.toLongID(stringID); 
    memoryIDMigrator.storeMapping(result, stringID);
    return result;
}

这样,您也可以使用MemoryAdministrator进行反向映射。如果您不需要它,您可以按照实现中的方式对其进行散列(它在中)。

用户Id和项目Id可以是字符串,这样可以将字符串转换为整数,并将映射(字符串,Id)保留在内存中;在推荐之后,您可以从id获取字符串。

Mahout中有一个自动执行这种操作的组件,名为
IDMigrator
,但我也建议从外部将其转换为数字id。