输入数据来源, 用户查询日志(SogouQ), 感谢搜狗实验室! 这次选择的是精简版(一天数据, 63MB, 解压后145MB), html
PS1: 日志原格式是GB2312编码, 必定要记得转成UTF-8node
PS2: 日志格式和格式说明: // 搜狗实验室的官方说明缓存
访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击的URL, ui
这个格式有坑, 深坑:编码
"该URL在返回结果中的排名\t用户点击的顺序号"这两个字段之间的分割符并不是制表符\t, 而是空格spa
val sogouQRdd = sc.textFile("hdfs://node1:9000/sogouQ/input") sogouQRdd.cache # 在下一次Action操做时, 将日志文件缓存到内存中
求出日志文件条目总数scala
val itemCountRdd = sogouQRdd.count itemCountRdd: Long = 1724264
对于每个查询词, 求出该 URL 在返回结果中的排名为1, 且用户点击的顺序号为1的条目总数日志
这说明这次搜索结果的 URL 的 Rank 最优code
val suitableRankRdd = sogouQRdd.filter(_.split('\t').length == 5).map(_.split('\t')) .filter(_(3).split(' ')(0).toInt == 1).filter(_(3).split(' ')(1).toInt == 1).count suitableRankRdd: Long = 279859
计算查询词 URL 最优 Rank 的频率:orm
最优Rank频率 = URL最优Rank次数 / 条目总数
suitableRankRdd / itemCountRdd = 0.1623
因此查询词 URL最优Rank 的频率为 16.23%
WordCount 模型适用不少数据统计, 其实简单的 WordCount 能够处理, 分析出不少的信息,