Java编写的Spark ALS协同过滤推荐算法的源代码能共享一下

简介: Java编写的Spark ALS协同过滤推荐算法的源代码能共享一下
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.mllib.recommendation.ALS;
import org.apache.spark.mllib.recommendation.MatrixFactorizationModel;
import org.apache.spark.mllib.recommendation.Rating;
import scala.Tuple2;
public class myAls {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
SparkConf conf=new SparkConf().setAppName("als").setMaster("local");
JavaSparkContext sc=new JavaSparkContext(conf);
JavaRDD<String> con=sc.textFile("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/mllib/als/sample.data");
JavaRDD<Rating> ratings=con.map(f->{
  return new Rating(
      new Integer(f.split("::")[0]),
      new Integer(f.split("::")[1]),
      new Double(f.split("::")[2]));
});//数据转换为javardd三元组
JavaRDD<Rating>[] rr=ratings.randomSplit(new double[]{0.3,0.7});
MatrixFactorizationModel model=ALS.train(rr[0].rdd(), 15, 10);//生成模型
JavaRDD<Tuple2<Object,Object>> up =rr[1].map(f->{//取0.7的数据要预测的用户和产品ID
  return new Tuple2<>(f.user(),f.product());
});
JavaPairRDD<String,Double> pupr= model.predict(up.rdd()).toJavaRDD().mapToPair(f->{
  return new Tuple2<String,Double>(f.user()+","+f.product(),f.rating());//用0.7的数据去预测得到一个键值对
});
//pupr.foreach(f->System.out.println(f+"gg"));
JavaPairRDD<String,Double> upr=rr[1].mapToPair(f->{//原来0.7的数据转化为键值对
  return new Tuple2<String,Double>(f.user()+","+f.product(),f.rating());
});
//upr.foreach(f->System.out.println(f+"ss"));
JavaPairRDD<String,Tuple2<Double,Double>> mm=upr.join(pupr);
//输出格式为((用户,项目),(预测评分,实际评分)) 
//mm.foreach(f->System.out.println(f+"qq"));
//model.save(sc.sc(),"file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/mllib/als/myals");
JavaPairRDD<String,Tuple2<Double,Double>> recom=mm.filter(f->{
  double f2_2=f._2._2;
  double f2_1=f._2._1;
  int a=(int)f2_1;
  int b=(int)f2_2;
  if (a==b){
      return true;}
  else
    return false;
});
double count=recom.count();
double counts=mm.count();
double accur=count/counts;
System.out.println("count="+count);
System.out.println("counts="+counts);
System.out.println("accur="+accur);
sc.stop();
  }
}

数据类似这种:用户 产品  评分  时间戳


6.1.png


利用自带的函数:

ALS.train(data,rank,iterations,lambda)


各参数意义:

ALS.train(数据,维度,迭代次数,正则化参数)

相关文章
|
1天前
|
算法 Java 索引
【算法】重建二叉树并进行后序遍历的Java实现
【算法】重建二叉树并进行后序遍历的Java实现
11 5
|
1天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
10 2
|
1天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
9 2
|
4天前
|
搜索推荐 算法 前端开发
计算机Java项目|基于协同过滤算法的体育商品推荐系统
计算机Java项目|基于协同过滤算法的体育商品推荐系统
|
4天前
|
算法 前端开发 Java
探讨Java中递归构建树形结构的算法
探讨Java中递归构建树形结构的算法
5 1
|
5天前
|
算法 Java
Java中常用hash算法总结
Java中常用hash算法总结
6 0
|
7天前
|
SQL JSON 分布式计算
|
7天前
|
SQL 分布式计算 Java
|
8天前
|
分布式计算 算法 搜索推荐
Java中可以用的大数据推荐算法
在Java中实现大数据推荐算法,通常使用Apache Mahout、Weka、DL4J或Spark MLlib。本文简要介绍了三种推荐算法:基于内容的推荐、协同过滤推荐和深度学习推荐,以及它们的使用场景。提供了每种算法的伪代码或关键代码片段。基于内容的推荐适用于有用户历史行为和物品内容信息的场景,而协同过滤适用于大量用户行为数据的场景,深度学习推荐则用于处理复杂特征。在实现时,注意数据预处理、特征提取、用户画像构建和相似度计算。
14 1
|
11天前
|
安全 算法
JAVA-银行家算法
JAVA-银行家算法
JAVA-银行家算法

热门文章

最新文章