调用MLlib库实现Kmeans聚类
来源:互联网 发布:短信群发软件价格 编辑:程序博客网 时间:2024/06/05 16:11
MLlib Kmeans Algorithm
使用工具
- IDE:IntelliJ IDEA
- scala解释器:scala-2.12.3
- Java jdk:jdk1.8.0_66
- spark lib:spark-assembly-1.4.1-hadoop2.6.0
Steps
获取数据集
wget http://labfile.oss.aliyuncs.com/courses/736/taxi.csv
注:
windows系统:要预先安装wget,然后启动DOS界面直接输入该命令即可。
Linux系统:直接输入该命令即可,Linux系统自带。在IDEA中创建工程
具体步骤可参考博客:
http://www.cnblogs.com/ppgeneve/p/5158069.html添加扩展库
File->Project Structure ->Libraries -> 点击+号 ->java ->选择spark-assembly-1.4.1-hadoop2.6.0 ->完成MLlib 官网:
https://spark.apache.org/docs/latest/api/scala/index.html#package
在官网即可查看Kmeans定义的方法和参数
导入Spark MLlib
import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.feature.Normalizer
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.{SparkContext}
Vectors和Normailzer都包含在MLlib库中,所以也可以在上面的官网查看用法
代码块
- 获取SparkContext,读取数据集并转化为RDD
val data = sc.textFile("data/clustering/taxi.txt")
注意:在project目录下新建data目录,并将下载的数据后缀名改为.txt并放在data目录下作为输入文件。
- 切分数据将其从标称型转化为Double类型,并转化为向量
val parsedData = data.map(s => Vectors.dense(s.split(',').map(_.toDouble)))
- 数据预处理,将原始数据正则化,并装入缓存
val nor = new Normalizer() //正则化val nordata = nor.transform(parsedData).cache()
- 导入Kmeans算法,设置参数并训练模型
val algorithm = new KMeans()algorithm.setK(6) //类簇个数为6个algorithm.setMaxIterations(100) //迭代次数为100次val clusters=algorithm.run(nordata) //训练模型
- 将类标签和原始数据进行拉链操作,并合并相同项
// 拉链操作val Kdata = clusters.predict(nordata).zip(parsedData) // 合并相同项val Kdata_res = Kdata.map(num =>(num,1)).reduceByKey(_ + _)
- 将计算结果保存至该工程的outPut目录下,方便查看结果
Kdata_res.saveAsTextFile("outPut/outputOne")Kdata.saveAsTextFile("outPut/outputTwo")
注意:每次运行时要确保outPut目录不存在,否则程序无法执行
- 计算各个类簇中心向量,并保存
val Kpoint =sc.parallelize(clusters.clusterCenters)Kpoint.saveAsTextFile("dataOut/taxi/Kpoint")
- 完整代码请见github
提示
在使用IDEA过程中,尤其是编写spark程序时可能会遇到大量问题,既有编译器方面也有代码方面。我遇到过很多编译器方面的问题,下面我就分享一个关于编译器的问题解决方案。
- Question
17/09/05 21:24:29 ERROR Shell: Failed to locate the winutils binary in the hadoop binary pathjava.io.IOException: Could not locate executable E:\SoftwareForLinux\local\hadoop\bin\winutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:355) at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:370) at org.apache.hadoop.util.Shell.<clinit>(Shell.java:363) at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79) at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:104) at org.apache.hadoop.security.Groups.<init>(Groups.java:86) at org.apache.hadoop.security.Groups.<init>(Groups.java:66) at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:280) at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:271) at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:248) at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:763) at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:748) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:621) at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2162)at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2162) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2162) at org.apache.spark.SparkContext.<init>(SparkContext.scala:301) at org.apache.spark.SparkContext.<init>(SparkContext.scala:155) at com.roger.taxi.taxiCase$.main(taxiCase.scala:13) at com.roger.taxi.taxiCase.main(taxiCase.scala)
通过错误提醒还是勉强能看懂问题出在哪,错误提示缺少hadoop相关组件,尤其是winutils.exe。由于我电脑是32位的,在网上下了很多版本的winutils.exe结果都是64位的与系统不兼容。下面跟大家分享一个32位的hadoop下载地址,由于原始下载链接找不到了就是用百度云盘,提取密码:rmvg。hadoop下载后要添加hadoop的环境变量,这里我不介绍了,可以去网上搜索一下添加环境变量的方法。
Q:如何在大数据平台提交程序
A:spark官方文档
A:博客分享Q:spark-assembly-1.4.1-hadoop2.6.0从何而来?
A:在apache spark官网下载spark-1.4.1,该包就在其lib目录下
最后如果文中有不当之处还请指正修改,感谢阅读本人第一篇博客,大家有疑问也可以通过评论区交流。
- 调用MLlib库实现Kmeans聚类
- Spark 非mllib实现的kmeans详解
- spark利用MLlib实现kmeans算法实例
- sparkml和mllib分别实现KMeans算法
- 3 分钟学会调用 Apache Spark MLlib KMeans
- Spark MLlib之KMeans
- Spark MLlib聚类clustering:KMeans K均值 ---原理及实战
- spark笔记-MLlib之kmeans
- Spark MLLib KMeans OOM 问题
- MLlib-Kmeans遇到的异常
- RHadoop实现kmeans聚类
- Kmeans聚类c++实现
- 实现kMeans聚类
- Python实现KMeans聚类
- Spark MLlib KMeans聚类算法
- spark mllib机器学习之四 kmeans
- spark之MLlib机器学习-Kmeans
- Spark MLlib Kmeans源代码解读(上)
- 1004. 成绩排名 (20)--PAT乙级
- 悬浮广告
- 文章标题
- Mybatis中的关系映射及懒加载机制
- NBA结果预测
- 调用MLlib库实现Kmeans聚类
- C和指针 第十三章
- Lock的使用
- Jquery ajax方法调用php数据
- java网络编程之Socket用法详解一
- 生成1~n的字典输出
- 使用log4j 基础
- 课后练习汇总
- ubuntu16 vultr 搭建ss