您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何進行mahout的安裝使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
安裝mahout
在 http://mahout.apache.org/ 官網上下載mahout,小編下載的版本是 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
小編是通過使用在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的安裝使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。