1

現在のユーザーが友達として追加できるユーザーのリストであるユーザーを推奨したい。

Cassandra と mahout を使用しています。mahout 統合パッケージには、 CassandraDataModelの実装が既にあります。このクラスを利用したいです。

したがって、私の推薦者クラスは次のようになります

public class UserFriendsRecommender {

@Inject
private CassandraDataModel dataModel;

public List<RecommendedItem> recommend(Long userId, int number) throws TasteException{
    UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(dataModel);
    // Optional:
    userSimilarity.setPreferenceInferrer(new AveragingPreferenceInferrer(dataModel));

    UserNeighborhood neighborhood =
              new NearestNUserNeighborhood(3, userSimilarity, dataModel);
    Recommender recommender = new GenericUserBasedRecommender(dataModel, neighborhood, userSimilarity); 
    Recommender cachingRecommender = new CachingRecommender(recommender);
    List<RecommendedItem> recommendations = cachingRecommender.recommend(userId, number);
    return recommendations;
}

}

CassandraDataModel には 4 つの列ファミリーがあります

static final String USERS_CF = "users";
  static final String ITEMS_CF = "items";
  static final String USER_IDS_CF = "userIDs";
  static final String ITEM_IDS_CF = "itemIDs";

このクラス、特に列ファミリーのクラスを理解するのに苦労しています。私が探すことができる例はありますか、または誰かが説明できる場合は、小さな例で素晴らしいでしょう.?

javadocはこれを言います

* <p>
 * First, it uses a column family called "users". This is keyed by the user ID
 * as an 8-byte long. It contains a column for every preference the user
 * expresses. The column name is item ID, again as an 8-byte long, and value is
 * a floating point value represnted as an IEEE 32-bit floating poitn value.
 * </p>
 * 
 * <p>
 * It uses an analogous column family called "items" for the same data, but
 * keyed by item ID rather than user ID. In this column family, column names are
 * user IDs instead.
 * </p>
 * 
 * <p>
 * It uses a column family called "userIDs" as well, with an identical schema.
 * It has one row under key 0. It contains a column for every user ID in the
 * model. It has no values.
 * </p>
 * 
 * <p>
 * Finally it also uses an analogous column family "itemIDs" containing item
 * IDs.
 * </p>
4

2 に答える 2

2

CassandraDataMdoel で必要な列ファミリーに関する次のすべての手順は、作成したキースペース (レコメンダーまたは他の名前) の下で cassandra-cli で実行する必要があります。

1: テーブル ユーザー

userID は行キーで、各 itemID には個別の列名があり、value はプリファレンスです。

CREATE COLUMN FAMILY users
WITH comparator = LongType
AND key_validation_class=LongType
AND default_validation_class=FloatType;

値を挿入:

set users[0][0]='1.0';
set users[1][0]='3.0';
set users[2][2]='1.0';

2: テーブル項目

itemID は行キーで、各 userID には個別の列名があり、value はプリファレンスです。

CREATE COLUMN FAMILY items
WITH comparator = LongType
AND key_validation_class=LongType
AND default_validation_class=FloatType;

値を挿入:

set items[0][0]='1.0';
set items[0][1]='3.0';
set items[2][2]='1.0';

3: 表のユーザー ID

このテーブルには 1 つの行しかありませんが、多くの列があります。つまり、各ユーザー ID には個別の列があります。

CREATE COLUMN FAMILY userIDs
WITH comparator = LongType
AND key_validation_class=LongType;

値を挿入:

set userIDs[0][0]='';
set userIDs[0][1]='';
set userIDs[0][2]='';

4: テーブル itemID:

このテーブルには 1 つの行しかありませんが、多くの列があります。つまり、各 itemID には個別の列があります。

CREATE COLUMN FAMILY itemIDs
WITH comparator = LongType
AND key_validation_class=LongType;

値を挿入:

set itemIDs[0][0]='';
set itemIDs[0][1]='';
set itemIDs[0][2]='';
于 2014-07-31T14:45:26.413 に答える