hadoop下的Kmeans算法实现三

来源:互联网 发布:淘宝店童装 编辑:程序博客网 时间:2024/05/26 14:10

初始化中心点CenterInitial.java

[java] view plaincopy
  1. import java.io.ByteArrayInputStream;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.IOException;  
  4. import java.io.OutputStream;  
  5. import java.net.URI;  
  6.   
  7. import org.apache.hadoop.conf.Configuration;  
  8. import org.apache.hadoop.fs.FSDataInputStream;  
  9. import org.apache.hadoop.fs.FileSystem;  
  10. import org.apache.hadoop.fs.Path;  
  11. import org.apache.hadoop.io.IOUtils;  
  12.   
  13.   
  14. public class CenterInitial {  
  15.       
  16.       
  17.     public void run(String[] args) throws IOException  
  18.     {  
  19.         String[] clist;//用于保存中心点  
  20.         int k = 2;//中心点选取个数  
  21.         String string = "";//保存各个中心点在同一个字符串string中  
  22.         String inpath = args[0]+"/4.txt";  //cluster数据集放在2.txt中  
  23.         String outpath = args[1]+"/input2/3.txt";  //center新选取的中心点放进3.txt中保存  
  24.         Configuration conf1 = new Configuration(); //读取hadoop文件系统的配置  
  25.         conf1.set("hadoop.job.ugi""hadoop,hadoop"); //配置信息设置  
  26.         FileSystem fs = FileSystem.get(URI.create(inpath),conf1); //FileSystem是用户操作HDFS的核心类,它获得URI对应的HDFS文件系统   
  27.         FSDataInputStream in = null;   
  28.         ByteArrayOutputStream out = new ByteArrayOutputStream();  
  29.         try{   
  30.            
  31.             in = fs.open( new Path(inpath) );   
  32.             IOUtils.copyBytes(in,out,50,false);  //用Hadoop的IOUtils工具方法来让这个文件的指定字节复制到标准输出流上   
  33.             //把in读到的数据 复制到out上  
  34.             clist = out.toString().split(" ");//将out以空格为分割符转换成数组在clist中保存  
  35.             } finally {   
  36.                 IOUtils.closeStream(in);  
  37.             }  
  38.           
  39.         FileSystem filesystem = FileSystem.get(URI.create(outpath), conf1); //获得URI对应的HDFS文件系统   
  40.           
  41.         for(int i=0;i<k;i++)  
  42.         {  
  43.             int j=(int) (Math.random()*100) % clist.length;//选取0到clist.lenth-1的随机数  
  44.             if(string.contains(clist[j]))  // 如果选取的是同一个随机数  
  45.             {  
  46.                 k++;  
  47.                 continue;  
  48.             }  
  49.             string = string + clist[j].replace(" """) + " ";//将得到的k个随机点的坐标用一个字符串保存  
  50.         }  
  51.         OutputStream out2 = filesystem.create(new Path(outpath) );   
  52.         IOUtils.copyBytes(new ByteArrayInputStream(string.getBytes()), out2, 4096,true); //把随机点坐标字符串out2中  
  53.         System.out.println("初始化过程:"+string);  
  54.     }  
  55.   
  56. }  
0 0
原创粉丝点击