要做推荐,用户行为数据是基础。

用户行为数据有哪些字段呢?

mahout的DataModel支持,用户ID,ItemID是必须的,偏好值(用户对当前Item的评分),时间戳 这四个字段

{@code userID,itemID[,preference[,timestamp]]}

mahout数据源支持从文件、DB中读取。

从FileDataModle.java的注释来看,还是做了不少工作的。

1)原文件更新后一定的时间段,才会reload

2)支持增量更新(不用每次都重新copy所有数据)

3)根据字段数目(有无评分)来选择不同的结构存储,节省内存

另外,

4)自己实现基础类型的数据结构,节省内存

~/mahout-core/src/main/java/org/apache/mahout/cf/taste/impl/common/FastIDSet.java
~/mahout-core/src/main/java/org/apache/mahout/cf/taste/impl/common/FastByIDMap.java
自己的实现的两个数据类型,都是通过hash快速查找, 而且避免java的Long class, 直接采用原生态的long行来节省内存空间。
同类型的还有 FastMap.java

* <p>
* 增量更新的方式, This class will also look for update "delta" files in the same
* directory, with file names that start the same way (up to the first period).
* These files have the same format, and provide updated data that supersedes
* what is in the main data file. This is a mechanism that allows an application
* to push updates to {@link FileDataModel} without re-copying the entire data
* file.
*
* 同一个目录下,数字来区分
* Finds update delta files in the same directory as the data file. This finds
* any file whose name starts the same way as the data file (up to first period)
* but isn't the data file itself. For example, if the data file is
* /foo/data.txt.gz, you might place update files at /foo/data.1.txt.gz,
* /foo/data.2.txt.gz, etc.
* </p>
*
* <p>
* 表示删除的语法, 偏好为空 One small format difference exists. Update files must also be
* able to express deletes. This is done by ending with a blank preference
* value, as in "123,456,".
* </p>
*
* <p>
* 增量更新的文件中,删除和更新不能混合使用 Note that it's all-or-nothing -- all of the items in the
* file must express no preference, or the all must. These cannot be mixed. Put
* another way there will always be the same number of delimiters on every line
* of the file!
* </p>

FileDataModel封装了从文件读取的功能,具体的存储还是由GenericDataModel来实现的。

详细的数据承载有这篇文章,这里就不多着墨了。

Apache mahout 源码阅读笔记--DataModel之FileDataModel的更多相关文章

  1. Apache mahout 源码阅读笔记-DataModel之UserBaseRecommender

    先来看一下使用流程: 1)拿到DataModel 2)定义相似度计算模型 PearsonCorrelationSimilarity 3)定义用户邻域计算模型 NearestNUserNeighborh ...

  2. Apache mahout 源码阅读笔记--协同过滤, PearsonCorrelationSimilarity

    协同过滤源码路径: ~/project/javaproject/mahout-0.9/core/src $tree main/java/org/apache/mahout/cf/taste/ -L 2 ...

  3. Apache Storm源码阅读笔记

    欢迎转载,转载请注明出处. 楔子 自从建了Spark交流的QQ群之后,热情加入的同学不少,大家不仅对Spark很热衷对于Storm也是充满好奇.大家都提到一个问题就是有关storm内部实现机理的资料比 ...

  4. Mina源码阅读笔记(四)—Mina的连接IoConnector2

    接着Mina源码阅读笔记(四)-Mina的连接IoConnector1,,我们继续: AbstractIoAcceptor: 001 package org.apache.mina.core.rewr ...

  5. CI框架源码阅读笔记5 基准测试 BenchMark.php

    上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功 ...

  6. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

  7. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

  8. CI框架源码阅读笔记2 一切的入口 index.php

    上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...

  9. 源码阅读笔记 - 1 MSVC2015中的std::sort

    大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...

随机推荐

  1. (转载)C++STL中vector容器的用法

     vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vec ...

  2. RFID Hacking–资源大合集

    原文: http://www.freebuf.com/news/others/605.html http://www.proxmark.org/forum/index.php RFID破解神器官方论坛 ...

  3. oracle 存储过程学习感悟

    1.跟大白话差不多 2.if...then.... else ....写的比较多 3.调用存储过程命令:execute procedure_name 4.调用存储函数命令:select '0' str ...

  4. cocos2d-x中CCEditbox导出到lua

    自从工作后感觉时间较少(每天工作9-22,晚上就不想动了,早上想多睡点),工作中用的是 cocos2d-x.cocos2d-x是一款手机游戏引擎,虽然支持lua,但和love2d相比非纯lua游戏引 ...

  5. gdb 初步学习记录

    客户有一段代码,一个死循环, 里面就一个 times(NULL) 函数,以及一个usleep, 运行了10分钟左右就会出现段错误. 现在用 gdb 调试看一下是哪一步出现了问题. 在Linux 虚拟机 ...

  6. Android——布局(线性布局linearLayout,表格布局TableLayout,帧布局FrameLayout)

    线性布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...

  7. RabbitMQ之发布订阅【译】

    在上一节中我们创建了一个工作队列,最好的情况是工作队列能够把任务恰到好处的分配给每一个worker.这一节中我们将做一些完全不同的事情--将消息传递给每一个消费者,这种模式被称为发布/订阅. 为了说明 ...

  8. postgreSQL php及客户端

    yum install php-pgsql “conf/config.inc.php”) $conf['servers'][0]['host'] = 'localhost'; and $conf['e ...

  9. python 神经网络实例

    #http://python.jobbole.com/82758/ # import numpy as np # # # # sigmoid function # def nonlin(x, deri ...

  10. 【HDU】3622 Bomb Game(2-SAT)

    http://acm.hdu.edu.cn/showproblem.php?pid=3622 又是各种逗.. 2-SAT是一种二元约束,每个点可以置于两种状态,但只能处于一种状态,然后图是否有解就是2 ...