您的位置:首页 > 其它

基于SVD矩阵分解的推荐算法及其应用

2017-10-27 22:38 417 查看

基于SVD矩阵分解的推荐算法及其应用

简要介绍

本文参照网上众多资料,搭建了Spark1.6.3并实现单机运行

主要介绍了如何搭建Spark平台并在Eclipse平台上运行简单的SVD实例

1.环境&软件

Ubuntu 14.04
OpenJDK 7
Scala 2.10.6
Spark 1.6.3
Eclipse 3.8.1
MovieLens 10M(测试用)


2.OpenJDK 7安装

参照:http://www.powerxing.com/install-hadoop/ 内含图片详情

更新apt

sudo apt-get update


安装Java环境

sudo apt-get install openjdk-7-jre openjdk-7-jdk


安装好 OpenJDK 后,需要找到相应的安装路径,这个路径是用于配置 JAVA_HOME 环境变量的。执行如下命令:

dpkg -L openjdk-7-jdk | grep '/bin/javac'


该命令会输出一个路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径了。如输出路径为 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac,则我们需要的路径为 /usr/lib/jvm/java-7-openjdk-amd64

接着配置 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置

gedit ~/.bashrc


在文件最前面添加如下单独一行(注意 = 号前后不能有空格),将“JDK安装路径”改为上述命令得到的路径,并保存:

export JAVA_HOME=JDK安装路径


最后使配置生效

source ~/.bashrc    # 使变量设置生效


设置好后我们来检验一下是否设置正确:

java -version


3.Scala 2.10.6安装

参照:http://blog.csdn.net/lin360580306/article/details/51233397

下载:http://www.scala-lang.org/download/2.10.6.html

解压缩:

tar –zxvf scala-2.10.6.tgz


进入sudo gedit /etc/profile在下面添加路径:

SCALA_HOME=/home/hadoop/scala-2.10.6 #注意替换成解压后的路径
PATH=$PATH:${SCALA_HOME}/bin


使配置生效

source /etc/profile


可以在命令行中输入 scala 检测是否安装成功



4.Spark1.6.3安装

参照:http://blog.csdn.net/lin360580306/article/details/51233397

下载:http://spark.apache.org/downloads.html

解压缩:

tar –zxvf spark-1.6.3-bin-hadoop2.6.tgz


进入sudo gedit /etc/profile在下面添加路径:

SPARK_HOME=/home/hadoop/spark-1.6.3-bin-hadoop2.6#注意替换成解压后的路径
PATH=$PATH:${SPARK_HOME}/bin


使配置生效

source /etc/profile


可以在命令行中输入 spark-shell(可在安装目录中bin里面找到) 检测是否安装成功

5.Eclipse 3.8安装

参照:http://www.powerxing.com/hadoop-build-project-using-eclipse/ 中的 “安装Eclipse”即可

找到Ubuntu软件中心->搜索eclipse->点击安装

6.Eclipse下使用Java开发SVD

参照:http://www.jianshu.com/p/a617005df355

新建Java工程->导入Spark包

代码:

public class MovieLens {
public static void main(String[] args) {

//删除一些无关的log信息
Logger.getLogger("org.apache.spark").setLevel(Level.WARN);
Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF);

//Spark信息配置
SparkConf conf = new SparkConf().setMaster("local[4]").setAppName("movielens");
JavaSparkContext sc = new JavaSparkContext(conf);
//读入文件
JavaRDD<String> data = sc.textFile("ratings.dat");
JavaRDD<Rating> rows = data.map(new Function<String, Rating>() {
private static final long serialVersionUID = 1L;
//处理文件信息
@Override
public Rating call(String arg0) throws Exception {
String[] strArr = arg0.split("::");
Rating r = new Rating(Integer.parseInt(strArr[0]), Integer.parseInt(strArr[1]), Double.parseDouble(strArr[2]));
return r;
}
});
//设置检查点
sc.setCheckpointDir("checkpoint/");
ALS als = new ALS();
als.setCheckpointInterval(2);
//分解的维度设置为20,最大迭代次数设置为5,而正则化系数设置为0.02
MatrixFactorizationModel a = als.train(rows.rdd(), 20, 5,0.02);
sc.close();
}
}


主要参照:http://www.cnblogs.com/pinard/p/6364932.html 里面的代码,用Java写一遍

代码中使用的MovieLens数据集可以在网上下载 http://files.grouplens.org/datasets/movielens/ml-10m.zip

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark 实例 svd