Mahout:读取自定义输入文件

lea*_*ner 6 java hadoop mahout

我正在玩Mahout,发现FileDataModel接受格式的数据

     userId,itemId,pref(long,long,Double).
Run Code Online (Sandbox Code Playgroud)

我有一些格式的数据

     String,long,double 
Run Code Online (Sandbox Code Playgroud)

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

Spi*_*nim 1

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

在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)
Run Code Online (Sandbox Code Playgroud)

  • Mahout 中有一个组件可以自动执行此类操作,称为“IDMigrator”,但我也建议从外部转换为数字 ID。 (2认同)