spark mllib k-means算法实现
package iie.udps.example.spark.mllib; import java.util.regex.Pattern; import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.mllib.clustering.KMeans;
import org.apache.spark.mllib.clustering.KMeansModel;
import org.apache.spark.mllib.linalg.Vector;
import org.apache.spark.mllib.linalg.Vectors; /**
* Example using MLLib KMeans from Java.
*
* spark-submit --class iie.udps.example.spark.mllib.JavaKMeans --master
* yarn-cluster --num-executors 15 --driver-memory 512m --executor-memory 2g
* --executor-cores 2 /home/xdf/test2.jar /user/xdf/Example.txt 10 2
*/
public final class JavaKMeans { @SuppressWarnings("serial")
private static class ParsePoint implements Function<String, Vector> {
private static final Pattern SPACE = Pattern.compile(","); @Override
public Vector call(String line) {
String[] tok = SPACE.split(line);
// 统一数据维度为3,此处没有考虑其他异常数据情况
if (tok.length < 3) {
tok = SPACE.split(line + ",0");
for (int i = tok.length; i < 3; i++) {
tok[i] = "0";
}
}
if (tok.length > 3) {
tok = SPACE.split("0,0,0");
}
double[] point = new double[tok.length];
for (int i = 0; i < tok.length; ++i) {
point[i] = Double.parseDouble(tok[i]);
}
return Vectors.dense(point);
} } public static void main(String[] args) {
if (args.length < 3) {
System.err
.println("Usage: JavaKMeans <input_file> <k> <max_iterations> [<runs>]");
System.exit(1);
}
String inputFile = args[0]; // 要读取的文件
int k = Integer.parseInt(args[1]); // 聚类个数
int iterations = Integer.parseInt(args[2]); // 迭代次数
int runs = 1; // 运行算法次数 if (args.length >= 4) {
runs = Integer.parseInt(args[3]);
}
SparkConf sparkConf = new SparkConf().setAppName("JavaKMeans");
// sparkConf.set("spark.default.parallelism", "4");
// sparkConf.set("spark.akka.frameSize", "1024");
System.setProperty(
"dfs.client.block.write.replace-datanode-on-failure.enable",
"true");
System.setProperty(
"dfs.client.block.write.replace-datanode-on-failure.policy",
"never");
// sparkConf.set(
// "dfs.client.block.write.replace-datanode-on-failure.enable",
// "true");
// sparkConf.set(
// "dfs.client.block.write.replace-datanode-on-failure.policy",
// "never");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
// 指定文件分片数
JavaRDD<String> lines = sc.textFile(inputFile,2400);// ,1264 , 1872,2400
JavaRDD<Vector> points = lines.map(new ParsePoint()); KMeansModel model = KMeans.train(points.rdd(), k, iterations, runs,
KMeans.K_MEANS_PARALLEL()); // System.out.println("Vector 98, 345, 90 belongs to clustering :"
// + model.predict(Vectors.dense(98, 345, 90)));
// System.out.println("Vector 748, 965, 202 belongs to clustering :"
// + model.predict(Vectors.dense(748, 965, 202)));
// System.out.println("Vector 310, 554, 218 belongs to clustering :"
// + model.predict(Vectors.dense(310, 554, 218))); System.out.println("Cluster centers:");
for (Vector center : model.clusterCenters()) {
System.out.println(" " + center); }
double cost = model.computeCost(points.rdd());
System.out.println("Cost: " + cost); sc.stop();
}
}
spark mllib k-means算法实现的更多相关文章
- Spark MLlib FPGrowth关联规则算法
一.简介 FPGrowth算法是关联分析算法,它采取如下分治策略:将提供频繁项集的数据库压缩到一棵频繁模式树(FP-tree),但仍保留项集关联信息.在算法中使用了一种称为频繁模式树(Frequent ...
- Spark MLlib KMeans 聚类算法
一.简介 KMeans 算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把分类样本点分到各个簇.然后按平均法重新计算各个簇的质心,从而确定新的簇心.一直迭代,直到簇心的移动距离小于某个给定的值. ...
- Spark MLlib协同过滤算法
算法说明 协同过滤(Collaborative Filtering,简称CF,WIKI上的定义是:简单来说是利用某个兴趣相投.拥有共同经验之群体的喜好来推荐感兴趣的资讯给使用者,个人透过合作的机制给予 ...
- Spark mllib 随机森林算法的简单应用(附代码)
此前用自己实现的随机森林算法,应用在titanic生还者预测的数据集上.事实上,有很多开源的算法包供我们使用.无论是本地的机器学习算法包sklearn 还是分布式的spark mllib,都是非常不错 ...
- KNN 与 K - Means 算法比较
KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...
- 十二、spark MLlib的scala示例
简介 spark MLlib官网:http://spark.apache.org/docs/latest/ml-guide.html mllib是spark core之上的算法库,包含了丰富的机器学习 ...
- Spark Mllib里如何生成KMeans的训练样本数据、生成线性回归的训练样本数据、生成逻辑回归的训练样本数据和其他数据生成
不多说,直接上干货! 具体,见 Spark Mllib机器学习(算法.源码及实战详解)的第2章 Spark数据操作
- Spark Mllib里的向量标签概念、构成(图文详解)
不多说,直接上干货! Labeled point: 向量标签 向量标签用于对Spark Mllib中机器学习算法的不同值做标记. 例如分类问题中,可以将不同的数据集分成若干份,以整数0.1.2,... ...
- Spark MLlib架构解析(含分类算法、回归算法、聚类算法和协同过滤)
Spark MLlib架构解析 MLlib的底层基础解析 MLlib的算法库分析 分类算法 回归算法 聚类算法 协同过滤 MLlib的实用程序分析 从架构图可以看出MLlib主要包含三个部分: 底层基 ...
随机推荐
- BZOJ2492 Revenge of Fibonacci
首先我们高精度加法算出前10W个数... 然后把所有的前40位搞出来建成trie树,于是就变成了模板题了... 说一下...这题要是直接建出来son[tot][10]会MLE...所以...建trie ...
- formvalidator4.1.3 使用过程中一些问题的解决
在使用formvalidator4.1.3 插件时 发现 正常情况调用时没有问题的,但是我们的项目中需要把css .js 之类的静态资源用单独的域名加载. 那么问题就来了在 该插件中 有一段这样的 ...
- CentOS 下的MySQL配置
先贴出代码(/etc/my.cnf)如下: #The following options will be passed to all MySQL clients [client] #password ...
- jdk、jre、jvm的关系
JDK里面的工具也是用JAVA编写的,它们本身运行的时候也需要一套JRE,如C:\Program Files\Java\jdk1.5.x\目录下的JRE.而C:\Program Files\Java\ ...
- 发送广播BroadcastReceiver
import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.vi ...
- bzoj 2241: [SDOI2011]打地鼠
#include<cstdio> #include<iostream> using namespace std; ][],b[][],ans,sum; void pan(int ...
- 二模 (8) day2
第一题: 题目描述: 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得 ...
- Prime Palindromes
题目大意:求出区间[a,b]之间的回文质数. a<=b<=10^8; 解题过程: 1.先打个素数表,新学了个 欧拉筛法,是对普通筛法的改进.普通筛法是每找到一个素数,就把它的所有倍数标记成 ...
- 兼容 IE,firfox 的时间日期出现 NaN
//当前日期加上天数后的新日期.function AddDays(days) { var d = new Date(); var year = d.getFullYear(); var day = ...
- Eclipse快捷键 10个最有用的快捷键---摘录
55 48 Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到 ...