2011-08-26 32 views
6

Tôi đã chơi với Mahout và phát hiện ra rằng FileDataModel chấp nhận dữ liệu trong định dạngMahout: Để đọc một tập tin đầu vào tùy chỉnh

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

Tôi có một số dữ liệu đó là của các định dạng

 String,long,double 

gì là phương pháp tốt nhất/dễ nhất để làm việc với tập dữ liệu này trên Mahout là gì?

Trả lời

1

Giả sử rằng đầu vào của bạn phù hợp với bộ nhớ, lặp lại nó. Theo dõi ID cho mỗi chuỗi trong từ điển. Nếu nó không phù hợp với bộ nhớ, hãy sử dụng sắp xếp và sau đó nhóm lại để hoàn thành cùng một ý tưởng.

Trong python:

nhập khẩu 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) 
+2

Có một thành phần trong Mahout thực hiện loại tự động này, được gọi là 'IDMigrator', nhưng tôi cũng khuyên bạn nên dịch sang ID số bên ngoài. –

3

Một cách để làm điều này là bằng cách tạo ra một phần mở rộng của FileDataModel. Bạn sẽ cần ghi đè phương thức readUserIDFromString(String value) để sử dụng một số loại trình giải quyết thực hiện chuyển đổi. Bạn có thể sử dụng một trong các triển khai của IDMigrator, như Sean gợi ý.

Ví dụ, giả sử bạn có một khởi MemoryIDMigrator, bạn có thể làm điều này:

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

Bằng cách này bạn có thể sử dụng để làm memoryIDMigrator ánh xạ ngược lại, quá. Nếu bạn không cần điều đó, bạn có thể chỉ băm nó theo cách nó được thực hiện trong việc thực hiện của họ (nó trong AbstractIDMigrator).

3

userId và itemId có thể là chuỗi, do đó this is the CustomFileDataModel sẽ chuyển đổi chuỗi của bạn thành số nguyên và sẽ giữ bản đồ (Chuỗi, Id) trong bộ nhớ; sau khi đề xuất bạn có thể nhận được chuỗi từ id.

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. –

+0

@ moskito-x cảm ơn vì đề xuất. – KlwntSingh

Các vấn đề liên quan