Hadoop实现K_means聚类算法(对NBA球队进行聚类分析)

该博客介绍了如何在Hadoop环境下,运用MapReduce实现K-means聚类算法对2016-2017赛季NBA球队的球风进行分析。博主通过Eclipse开发,在Linux系统上搭建Hadoop集群,并提供了数据来源和代码地址。实验数据包含球队的三分球出手次数和pace值,最终生成聚类结果。

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

利用Hadoop完成对NBA 30支球队球风的聚类

本程序完成了Hadoop下,利用MapReduce思想实现K_means聚类算法。由于本人只有一台笔记本,加之写这个程序的主要原因是学习MapReduce思想,以及如何使用Hadood编程,因此主要面向功能的实现,数据集没有选择大数据集。

本程序在Linux下利用Eclipse开发,开发之前需要搭建Hadoop集群,配置伪分布模式或完全分布模式,安装Eclipse并为其安装hadoop-eclipse-plugin-x.x.x.jar插件。以上步骤可参考网上其他博客~

实验数据为2016-2017NBA常规赛各支球队数据指标:http://www.basketball-reference.com/leagues/NBA_2017.html
我对其进行了下载和手工“清洗”。NBA本赛季跑轰风大行其道,以勇士,火箭,骑士等球队为代表,跑轰就是所谓的打小球的意思。衡量一个球队是不是跑轰型球队,很好的衡量标准就是此球队在场上的节奏值(pace值),跑轰球队都是小个,因此速度很快,有种打闪电战的意思,往往10秒以内就能完成一次进攻,迅雷不及掩耳盗铃,另对方措手不及。跑轰球队还有一个很重要的指标就是三分球出手次数,我们看到像勇士,火箭,骑士等球队场均三分球出手次数都特别高,而像马刺之类的传统球队,不仅pace值低,而且很少投三分。所以实验我为了简单,就用这两个指标作为球风的评判标准,看看哪些球队球风相似~

实验数据就俩,一个是所有球队三分球出手次数和pace值(data.txt 我后面会附上数据的下载链接,供大家验证),如下:

这里写图片描述

另一个就是我手工选取的初始五个聚类中心点(centers.txt 为了方便我直接选了前五个,必须承认这样是不好的,还是那句话,为了实现功能)
这里写图片描述

开始实验前,你必须将数据(.txt格式)存放到对应路径下(可能与代码中的路径不一致,请自行修改),然后将数据上传到HDFS文件系统中(利用Eclipse上传就好了),实验结束你会得到另一个txt文件,代表聚类结果(注意Eclipse中更新数据后必须右击刷新一下才能看到,这是个bug)

然后运行代码(代码写的比较粗糙,但整体思路还算清晰),稍等个把小时就能得出结果(你可以将代码中的迭代次数或者阈值修改一下,这样就能很快收敛,程序就可以快快的运行完成

功能部分建议先了解一下思路,然后就能看懂了,如果哪里有疑问,或者有错误,请留言讨论,我就不解释了(人懒哈哈)。话不多说,上代码:

在此之前,先看下整个项目的目录结构

项目目录结构

首先就是HDFS文件系统:里面NBAData目录中存放了NBA球队数据,然后项目中共有五个.java文件,建议看的顺序为CommonArgument –> KmeansDriver –> KmeansMap –> KmeansReduce,然后Util类中实现了一些辅助方法,因此你遇到这个方法打开Util找一下就好(穿插着看)。

//CommonArgument.java
import org.apache.hadoop.fs.Path;

public class CommonArgument {
   
   
    public static final int K=5;//聚类的类别数为5
    public static final String inputlocation="hdfs://localhost:8020/user/NBAData/data.txt";
    public static final String outputlocation="hdfs://localhost:8020/user/NBAData/results";
    public static final String center_inputlocation="hdfs://localhost:8020/user/NBAData/centers.txt";
    public static final String center_outputlocation="hdfs://localhost:8020/user/NBAData/output_centers";
    public static final String new_center_outputlocation="hdfs://localhost:8020/user/NBAData/output_centers/part-r-00000";
    public static final int REPEAT=100;
    public static final float threshold=(float)0.1;
    public static Path inputpath=new Path(inputlocation);
    public static Path outputpath=new Path(outputlocation);
    public static Path center_inputpath=new Path(center_inputlocation);
    public static Path center_outputpath=new Path(center_outputlocation);
}
//KmeansDriver.java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
imp
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值