mahout演算法canopy源碼分析之一:獲得輸入資料

來源:互聯網
上載者:User
關鍵字 nbsp; 演算法 java 面的
對於canopy的輸入資料需要的形式為序列檔,同時保證key:Text、HTTP://www.aliyun.com/zixun/aggregation/9541.html"> value:VectorWritable。 昨晚準備打算使用單純的java程式搞定輸入資料的準備,無奈老是會出點問題,昨晚的問題「找不到檔」暫時還沒找到原因。

其實如果只是要獲得輸入資料那麼,可以使用mahout官網提供的方法在得到了序列的*.txt檔後直接把mahout-distribution-0.7.zip解壓拷貝到虛擬機器,(在/etc/ profile裡面配置下hadoop_home變數)然後找到mahout_home/bin目錄,執行 chmod +x mahout ,然後分別執行

[python] view plaincopy ./mahout seqdirectory -i <input> -o <output>  [python] view plaincopy ./mahout se q2sparse -i <output>/chunk-0 -o <output-in> 

上面的<input>、<output>對應于自己的輸入和輸出;我所使用的資料並不是 Reuters dataset的全部資料,而只是前三個:reut2-000.sgm、reut2-001.sgm、 reut2-002.sgm,這樣的資料在經過ExtractReuters 後生成了3000個檔,然後經過seqdirectory合併成了一個2.41M的資料檔案。 seq2sparse有7個job,每個job負責自己的內容,這個暫時不加分析;最終的結果在<output-in>/tfidf-vectors裡面,即為輸入資料;

有了輸入資料就可以直接跑程式了,首先不管程式是什麼樣子的,先跑出結果再說:

[java]&nbsp;view plaincopy&nbsp;package&nbsp;mahout.test.canopy;&nbsp; import&nbsp;java.io.IOException;&nbsp; import&nbsp;org.apache.hadoop.conf.Configuration;&nbsp; import&nbsp;org.apache.hadoop.fs.Path;&nbsp; import &nbsp;org.apache.mahout.clustering.canopy.CanopyDriver;&nbsp; import&nbsp; org.apache.mahout.common.distance.DistanceMeasure;&nbsp; import&nbsp; org.apache.mahout.common.distance.EuclideanDistanceMeasure;&nbsp; public&nbsp;class&nbsp;CanopyTest&nbsp;{ &nbsp; &nbsp; &nbsp; public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp; ClassNotFoundException,&nbsp;IOException,&nbsp;InterruptedException&nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Configuration&nbsp;conf&nbsp;=new&nbsp;Configuration();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conf.set(" mapred.job.tracker",&nbsp;"192.168.128.138:9001");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Path&nbsp;input=new&nbsp;Path( "hdfs://hadoop:9000/user/hadoop/output/canopyvec/tfidf-vectors");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Path&nbsp;output=new&nbsp;Path("hdfs://hadoop:9000/user/hadoop/output/canopy-output");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DistanceMeasure&nbsp;measure=new&nbsp;EuclideanDistanceMeasure();&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; CanopyDriver.buildClusters(conf,&nbsp;input,&nbsp;output,&nbsp;measure,&nbsp;33.1,&nbsp;22.1,&nbsp;3,&nbsp; false);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("job&nbsp;is&nbsp;done."); &nbsp; &nbsp; &nbsp; }&nbsp; }&nbsp;

最開始的時候我的t1、t2設置為3.1、2.1結果map出來的結果數是為零(這個暫時也不知道是代表什麼意思),後來改為上面的結果可以看到map輸出了509條記錄, reduece輸出3條記錄(符合參數clusterFileter的設定值:3),最後的輸出為:canopy-output/clusters-0-final/part-r-00000。

為了便於後面的觀察,所以不使用上面的資料,而使用自己造的資料,造資料之前首先要知道輸入資料的格式,那麼使用下面的代碼看下輸入資料是什麼:

[java] view plaincopy package mahout.test.utils;  import java.io.IOException;  import org.apache.hadoop.conf.Configuration;  import org.apache.hadoop.fs.Path;  import org.apache.hadoop.io.Text;  import org.apache.hadoop.mapreduce.Job;  import org.apache.hadoop.mapreduce.Mapper;  import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;  import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  import org.apache.hadoop.util.ToolRunner;  import org.apache.mahout.common.AbstractJob;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.