MAHOUT之关联规则挖掘算法

来源:互联网 发布:faceshift 知乎 编辑:程序博客网 时间:2024/05/16 15:38

需求说明

目前正在对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,559226180,10895,24571,23295,20578,27791,2729,86377380,18805,25086,19048,3190,21995,10908,125763458,12426,205781880,10702,1731,5185,18575,2896721815,10872,1873020626,17921,28930,14580,2891,1108018075,6548,28759,171337868,15200,134947868,28617,18097,22999,16323,8637,7045,2573312189,8816,22950,18465,13258,27791,209792672817512,14821,1874126619,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表示将不存储除数据以外的其他文本信息。

0 0
原创粉丝点击