hadoop下的Kmeans算法实现三

该博客详细介绍了如何在Hadoop环境下实现Kmeans聚类算法,重点讲解了初始化中心点的过程,通过CenterInitial.java类进行阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始化中心点CenterInitial.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;


public class CenterInitial {
	
	
	public void run(String[] args) throws IOException
	{
		String[] clist;//用于保存中心点
		int k = 2;//中心点选取个数
		String string = "";//保存各个中心点在同一个字符串string中
		String inpath = args[0]+"/4.txt";  //cluster数据集放在2.txt中
		String outpath = args[1]+"/input2/3.txt";  //center新选取的中心点放进3.txt中保存
		Configuration conf1 = new Configuration(); //读取hadoop文件系统的配置
		conf1.set("hadoop.job.ugi", "hadoop,hadoop"); //配置信息设置
		FileSystem fs = FileSystem.get(URI.create(inpath),conf1); //FileSystem是用户操作HDFS的核心类,它获得URI对应的HDFS文件系统 
		FSDataInputStream in = null; 
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		try{ 
         
			in = fs.open( new Path(inpath) ); 
			IOUtils.copyBytes(in,out,50,false);  //用Hadoop的IOUtils工具方法来让这个文件的指定字节复制到标准输出流上 
			//把in读到的数据 复制到out上
			clist = out.toString().split(" ");//将out以空格为分割符转换成数组在clist中保存
			} finally { 
				IOUtils.closeStream(in);
			}
		
		FileSystem filesystem = FileSystem.get(URI.create(outpath), conf1); //获得URI对应的HDFS文件系统 
		
		for(int i=0;i<k;i++)
		{
			int j=(int) (Math.random()*100) % clist.length;//选取0到clist.lenth-1的随机数
			if(string.contains(clist[j]))  // 如果选取的是同一个随机数
			{
				k++;
				continue;
			}
			string = string + clist[j].replace(" ", "") + " ";//将得到的k个随机点的坐标用一个字符串保存
		}
		OutputStream out2 = filesystem.create(new Path(outpath) ); 
		IOUtils.copyBytes(new ByteArrayInputStream(string.getBytes()), out2, 4096,true); //把随机点坐标字符串out2中
		System.out.println("初始化过程:"+string);
	}

}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值