MAHOUT之关联规则挖掘算法
2015-09-06 22:42
211 查看
需求说明
目前正在对hive表中的数据做分析,期望从已有的数据中挖掘出类似购物篮的关联规则,但是单机环境下的关联规则算法实在是无法胜任大数据环境下的数据挖掘工作,无奈寻求大数据环境下的分布式挖掘算法,目前可供选用的关联规则挖掘算法有Apriori和fp-tree两种,前者较后者来说,当挖掘过万的记录时,效率上更是百倍的差距,所以选择mahout中提供的fpgrowth算法来实现关联规则挖掘。准备工作
为了配合hive中的数据表完成挖掘工作,这里需要安装的工具主要有:1)hadoop平台,若想深入了解mapreduce的开发原理,可以参考Helloworld案例;
2)hive工具,建议使用textfile格式来存储数据,方便mahout直接在hdfs下调用数据;
3)mahout 0.9版本及之前(注,之后的版本不提供关联规则的挖掘算法,但是0.9版会与hadoop2.2及以上版本存在不兼容的现象),有关FP-TREE算法的原理可以参考该博文;
可观察mahout的jar包中是否提供了FPGrowthDriver类,若有,则是可以直接使用的。
关联规则使用
1)从hive中获取数据,进行数据ETL过程,最终输入数据格式为(每行一条购物记录,可用任何分隔符分割):4750,19394,25651,6395,5592 26180,10895,24571,23295,20578,27791,2729,8637 7380,18805,25086,19048,3190,21995,10908,12576 3458,12426,20578 1880,10702,1731,5185,18575,28967 21815,10872,18730 20626,17921,28930,14580,2891,11080 18075,6548,28759,17133 7868,15200,13494 7868,28617,18097,22999,16323,8637,7045,25733 12189,8816,22950,18465,13258,27791,20979 26728 17512,14821,18741 26619,14470,21899,6731
2)利用mahout提供的方式执行命令:
mahout org.apache.mahout.fpm.pfpgrowth.FPGrowthDriver -i input/* -o output -method mapreduce -regex ‘[,|\t| ]’ -s 10
参数说明:
-i 输入路径,由于运行在hadoop环境中,所以输入路径必须是hdfs路径,这里需要指出文件名,所示多个,则可以用*代表input目录下的所有文件。
挖囧结果
最终运行的结果如下图所示,会产生四个文件夹,其中,挖掘的关联结果在frequentpatterns文件夹下其中:flist是一个文件,按降序排列存储了单个项出现的频次(频次大于支持度),fpgrowth存储的是按频繁树获取的频繁项集(没有经过整理吧),frequentpatterns则是我们需要的经过排序合并后的频繁项集(每一个单项都有),最后一个文件夹和flist记录的内容差不多,包括低于支持度的项的统计(貌似也有单项统计的)。
由于mahout的结果是sequencefile格式存储,所以需要mahout提供的seqdumper方法将序列文件转化成文本文件查看,可使用命令为:
mahout seqdumper -i output/frequentpatterns/part-r-00000 -o output -q
注:这里的-o命令若不加以说明,则是将hdfs上的结果存储到本地目录路径上,-q表示将不存储除数据以外的其他文本信息。
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例