如何进行mahout的安装使用

77次阅读
没有评论

共计 4215 个字符,预计需要花费 11 分钟才能阅读完成。

这篇文章给大家介绍如何进行 mahout 的安装使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

安装 mahout

在  http://mahout.apache.org/  官网上下载 mahout,丸趣 TV 小编下载的版本是  mahout-distribution-0.9.tar.gz  

解压到 mahout 文件夹下

修改环境变量

在 /etc/profile 中添加 :

export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$MAHOUT_HOME/lib:$JAVA_HOME/jre/lib
export MAHOUT_HOME=/home/Shin/hadoop-1.2.1/mahout/mahout-distribution-0.9
export MAHOUT_CONF_DIR=/home/Shin/hadoop-1.2.1/mahout/mahout-distribution-0.9/conf
export PATH=$PATH:/home/Shin/hadoop-1.2.1/mahout/mahout-distribution-0.9/bin
export HADOOP_CONF_DIR=/home/Shin/hadoop-1.2.1/conf

之后 source 一下  /etc/profile

丸趣 TV 小编是通过使用在 java 中调用 linux 命令的方式来调用 mahout 中的随机森林

java 调用 linux 命令

有如下 API:

Process exec(String command) //  在单独的进程中执行指定的字符串命令 
Process exec(String command, String[] envp) //  在指定环境的单独进程中执行指定的字符串命令 
Process exec(String command, String[] envp, File dir) //  在有指定环境和工作目录的独立进程中执行指定的字符串命令 
Process exec(String[] cmdarray) // 在单独的进程中执行指定命令和变量 
Process exec(String[] cmdarray, String[] envp) //  在指定环境的独立进程中执行指定命令和变量 
Process exec(String[] cmdarray, String[] envp,File dir) // 在指定环境和工作目录的独立进程中执行指定的命令和变量 

mahout 调用随机森林的命令参数

参照

http://mahout.apache.org/users/classification/partial-implementation.html

//  生成数据集描述文件
String[] commmandStrings1 = new String[] {
 /home/Shin/hadoop-1.2.1/bin/hadoop ,
 jar ,
 /home/Shin/hadoop-1.2.1/mahout/mahout-distribution-0.9/mahout-core-0.9-job.jar ,
 org.apache.mahout.classifier.df.tools.Describe ,  -p ,
 citydata/city.txt ,  -f ,  citydata/city+.info ,  -d ,
 15 ,  N ,  C ,  L  };
-p:训练数据路径
-f:输出描述文件路径
-d:数据属性描述,具体如下
N: NUMERICAL
C: CATEGORICAL
L: LABEL
I: IGNORED
数据:(citytest.txt)
115 0.5 0.85 11 49 230 257 155 231 0 0 20 54 2 2  臭氧 1 小时   轻度污染
45 0.4 0.583 8 23 144 226 113 196 19 49 19 35 2 3 null  优
31 0.394 0.478 8 16 68 96 46 80 31 28 8 11 3 3 null  优
27 0.779 0.84 16 25 86 87 61 82 26 40 11 17 6 10 null  优
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 null null
95 1.441 1.203 11 37 92 177 102 102 135 79 71 35 39 40  细颗粒物 (PM2.5)  良
51 0.559 0.563 7 12 74 74 68 68 52 64 15 17 22 22  颗粒物 (PM10)  良
43 0.286 0.365 5 20 52 59 45 45 43 48 12 16 9 9 null  优
68 1.178 1.748 14 58 105 129 74 90 85 92 26 38 13 10  颗粒物 (PM10)  良
55 0.435 0.82 11 32 76 94 57 80 53 107 39 59 3 2  细颗粒物 (PM2.5)  良
//  生成决策森林  
String[] commmandStrings2 = new String[] {
 /home/Shin/hadoop-1.2.1/bin/hadoop ,
 jar ,
 /home/Shin/hadoop-1.2.1/mahout/mahout-distribution-0.9/mahout-examples-0.9-job.jar ,
 org.apache.mahout.classifier.df.mapreduce.BuildForest ,
 -Dmapred.max.split.size=1874231 ,  -d ,
 citydata/city.txt ,  -ds ,  citydata/city+.info ,  -sl ,
 5 ,  -p ,  -t ,  100 ,  -o ,  nsl-forest  };
-d:训练数据文件路径
-ds:数据描述文件路径
-sl:每个数的每个节点随机选多少个属性
-p:代表使用部分执行
-t:创建树的数量
-o:输出决策森林文件路径
//  使用决策森林分类新数据
String[] commmandStrings3 = new String[] {
 /home/Shin/hadoop-1.2.1/bin/hadoop ,
 jar ,
 /home/Shin/hadoop-1.2.1/mahout/mahout-distribution-0.9/mahout-examples-0.9-job.jar ,
 org.apache.mahout.classifier.df.mapreduce.TestForest ,
 -i ,  citydata/citytest.txt ,  -ds ,
 citydata/city+.info ,  -m ,  nsl-forest ,  -a ,  -mr ,
 -o ,  predictions  };
-i:测试文件路径
-ds:数据描述文件路径
-m:决策森林文件所在路径
-mr:使用 Hadoop 分布计算
-o:输出文件路径 
Process process1, process2, process3
// Process exec(String[] cmdarray)
process1 = Runtime.getRuntime().exec(commmandStrings1);
process1.waitFor();
process2 = Runtime.getRuntime().exec(commmandStrings2);
process2.waitFor();
process3 = Runtime.getRuntime().exec(commmandStrings3);
process3.waitFor();

由于是编程调用 linux,其原本在控制台的输出没有可以显示的地方,要获得控制台的输出,通常使用

process.getInputStream()

可是,使用这个 API 后,eclipse 编辑器控制台没有得到任何输出,尝试使用其他 linux 命令,Eg:bin/hadoop dfs -rmr test.txt   则可以得到输出。

偶然间使用

process.getErrorStream()

竟然能得到 mahout 的输出

InputStreamReader ir = new InputStreamReader(process.getErrorStream());
LineNumberReader input = new LineNumberReader(ir);
while ((line = input.readLine()) != null) {  相关操作}

mahout 预测结果输出

predictions/citytest.txt.out

预测结果可以在终端下可以用查看

bin/hadoop dfs -cat predictions/*

预测结果是 double 类型的 0.0,1.0,2.0     但是,在 eclipse 下查看是空的,将其 load 到本地查看是乱码,放到 windows 下显示正常,但是浮点数间有空格,后来在终端下用 vim 编辑可以看到数据真正的展示形式  ^@0 ^@ . ^@0

解决方案如下

FileReader in = new FileReader( citytest.txt.out 
BufferedReader bin = new BufferedReader(in);
FileWriter out = new FileWriter( cityout.txt 
String str;
while ((str = bin.readLine()) != null) {char a = str.charAt(1);
 char b = str.charAt(3);
 char c = str.charAt(5);
 String s = Character.toString(a) + Character.toString(b)+ Character.toString(c);
 out.write(s +  \n 
 }
in.close();
out.close();

关于如何进行 mahout 的安装使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4215字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)