복붙노트

[HADOOP] Mahout : 사용자 정의 입력 파일을 읽으려면

HADOOP

Mahout : 사용자 정의 입력 파일을 읽으려면

나는 Mahout과 놀고 있었고 FileDataModel이 형식의 데이터를 허용한다는 것을 알았습니다.

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

나는 형식의 데이터를 가지고있다.

     String,long,double 

Mahout에서이 데이터 세트를 사용하는 가장 쉽고 / 쉬운 방법은 무엇입니까?

해결법

  1. ==============================

    1.이를 수행하는 한 가지 방법은 FileDataModel의 확장을 작성하는 것입니다. readUserIDFromString (String value) 메서드를 재정의하여 어떤 종류의 해결자를 사용하여 변환해야합니다. Sean이 제안한대로 IDMigrator 구현 중 하나를 사용할 수 있습니다.

    이를 수행하는 한 가지 방법은 FileDataModel의 확장을 작성하는 것입니다. readUserIDFromString (String value) 메서드를 재정의하여 어떤 종류의 해결자를 사용하여 변환해야합니다. Sean이 제안한대로 IDMigrator 구현 중 하나를 사용할 수 있습니다.

    예를 들어 초기화 된 MemoryIDMigrator가 있다고 가정하면 다음을 수행 할 수 있습니다.

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

    이렇게하면 memoryIDMigrator를 사용하여 역 매핑을 수행 할 수도 있습니다. 필요없는 경우에는 구현시 완료된 방식으로 해시 할 수 있습니다 (AbstractIDMigrator에 있음).

  2. ==============================

    2.userId와 itemId는 string이 될 수 있습니다. 따라서이 문자열은 정수로 문자열을 변환하고 메모리 (String, Id)를 유지합니다 CustomFileDataModel입니다. 추천 후 ID에서 문자열을 얻을 수 있습니다.

    userId와 itemId는 string이 될 수 있습니다. 따라서이 문자열은 정수로 문자열을 변환하고 메모리 (String, Id)를 유지합니다 CustomFileDataModel입니다. 추천 후 ID에서 문자열을 얻을 수 있습니다.

  3. ==============================

    3.여러분의 입력이 메모리에 들어가면 그것을 반복하십시오. 사전에있는 각 문자열의 ID를 추적하십시오. 메모리에 맞지 않으면 sort를 사용한 다음 group by를 사용하여 동일한 아이디어를 얻으십시오.

    여러분의 입력이 메모리에 들어가면 그것을 반복하십시오. 사전에있는 각 문자열의 ID를 추적하십시오. 메모리에 맞지 않으면 sort를 사용한 다음 group by를 사용하여 동일한 아이디어를 얻으십시오.

    파이썬에서 :

    import sys

    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)
    
  4. from https://stackoverflow.com/questions/7209624/mahout-to-read-a-custom-input-file by cc-by-sa and MIT license