mahout做推荐时uid,pid为string类型
来源:互联网 发布:远程网络连接器 编辑:程序博客网 时间:2024/06/14 06:58
mahout做推荐的输入只能是long类型,但在某些网站中,存储的数据不是long类型,是string类型。
现在的手机APP,每个手机都有其device_id,也是string类型。如果能以string类型作为uid,即使用户不注册,不登录。只要采用device_id作为其uid,也可以做精准推荐。
mahout提供了一个接口,能把string转为唯一的long类型数据,然后以map方式存储起来,计算完成后再把long转为string类型。
下面是我的一个小例子
package test;import org.apache.mahout.cf.taste.impl.model.MemoryIDMigrator;public class TestMT {public static void main(String[] args) {// TODO Auto-generated method stubString test = "d140615p10693zc";MemoryIDMigrator thing2long = new MemoryIDMigrator();Long testLong = thing2long.toLongID(test);System.out.println(testLong);thing2long.storeMapping(testLong, test);String a =thing2long.toStringID(testLong);System.out.println(a);}}
输出
4365567189612030889d140615p10693zc
查看mahout源码,其实把string类型变成long采用的是MD5加密方式。源码如下
public abstract class AbstractIDMigrator implements IDMigrator { private final MessageDigest md5Digest; protected AbstractIDMigrator() { try { md5Digest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException nsae) { // Can't happen throw new IllegalStateException(nsae); } } /** * @return most significant 8 bytes of the MD5 hash of the string, as a long */ protected final long hash(String value) { byte[] md5hash; synchronized (md5Digest) { md5hash = md5Digest.digest(value.getBytes(Charsets.UTF_8)); md5Digest.reset(); } long hash = 0L; for (int i = 0; i < 8; i++) { hash = hash << 8 | md5hash[i] & 0x00000000000000FFL; } return hash; } @Override public long toLongID(String stringID) { return hash(stringID); } @Override public void refresh(Collection<Refreshable> alreadyRefreshed) { } }
其实根据这个思想,写项目时也可以不调用此接口。在写程序时,可以先用mapreduce对原CSV文件进行处理把所有的数据变为long类型,并记录一个(string key,long value)的文件,然后进行推荐,用结果数据和前mapreduce输出做join即可得出结果。
0 0
- mahout做推荐时uid,pid为string类型
- Uid pid
- mahout 为约会数据集推荐
- Android Pid和Uid
- Android:Uid&Pid,etc.
- android UID和PID
- UID、User ID &PID
- String 类型做参数
- Android之UID and PID
- Android之UID and PID
- Android中的PID,UID,TID
- Android之UID and PID
- Android之UID and PID
- Android之UID and PID
- Android之UID and PID
- Android之UID and PID
- Android之UID and PID
- android中的Uid、Pid、Tid
- 关于 xcode5 的no matching provisioning profiles found
- POJ3683——Priest John's Busiest Day
- UINavigationController(二)
- poj 3525 Most Distant Point from the Sea,半平面交 + 二分
- 用strace跟踪系统调用
- mahout做推荐时uid,pid为string类型
- dblink创建
- Android Canvas绘图详解
- libevent小程序
- 图像处理之图像金字塔
- Jquery中AJAX参数详解
- 学习c++其实有点反直觉
- 医疗会诊音视频技术解决方案
- Java多线程实现的三种方式